Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
#1

getline() в чем дело - C++

27.11.2011, 19:09. Просмотров 349. Ответов 3
Метки нет (Все метки)

Нужно заполнять данный массив, если использовать просто "cin<<" то пробелы нельзя делать при вводе. Поэтому хочу использовать getline(), вроде все правильно, но почему то работает не корректно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string.h>
using namespace std;
 
struct WORKER 
 {
        char fio[40];
        char post[40];
        short year;
 };
 
 
void main()
{
    setlocale (LC_ALL, "Russian");
    WORKER m[4];
    for (int i=0; i<4; i++)
    {
        cout<<"Введите фамилию и инициалы:"<<endl;
        cin.getline(m[i].fio, 40, '\n');
        
        cout<<"Должность:"<<endl;
        cin.getline(m[i].post, 40, '\n');
        
        cout<<"Год поступления на работу:"<<endl;
        cin>>m[i].year;
    }
}
Не могу понять, почему происходит то что на скрине во вложении.
В чем тут ошибка?
0
Миниатюры
getline() в чем дело  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 19:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос getline() в чем дело (C++):

С++ по Krupniku. Problema с задачей. Может дело в getline() ? - C++
Всем привет! Учу С++ по книге Крупника. В его задаче нужно сделать словарь из текста 2-х книг на английском языке. Например Шекспира....

В чем отличия cin.getline от gets? - C++
Напрмер, записи gets(str) от cin.getline(str, 1000) что лучше использовать?

в чем дело? - C++
может кто объяснит в чем дело? просто заметил одну особенность, если temp &lt;=8 символам (не считая нулевого в конце), то t выводит с двумя...

В чем дело? - C++
Что такое, почему не создается прога?

не пойму в чем дело - C++
всем привет! такая вот у меня проблема: две сортировки должны отсортировать массивы из 1000, 5000 и 10000 элементов и подсчитать время...

не могу понять в чем дело - C++
In file included from /usr/local/lib/gcc47/include/c++/csignal:44:0, from /home/dir/core.h:67: ...

3
Сыроежка
Заблокирован
27.11.2011, 19:20 #2
Цитата Сообщение от Alexpm Посмотреть сообщение
Нужно заполнять данный массив, если использовать просто "cin<<" то пробелы нельзя делать при вводе. Поэтому хочу использовать getline(), вроде все правильно, но почему то работает не корректно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <string.h>
using namespace std;
 
struct WORKER 
 {
        char fio[40];
        char post[40];
        short year;
 };
 
 
void main()
{
    setlocale (LC_ALL, "Russian");
    WORKER m[4];
    for (int i=0; i<4; i++)
    {
        cout<<"Введите фамилию и инициалы:"<<endl;
        cin.getline(m[i].fio, 40, '\n');
        
        cout<<"Должность:"<<endl;
        cin.getline(m[i].post, 40, '\n');
        
        cout<<"Год поступления на работу:"<<endl;
        cin>>m[i].year;
    }
}
Не могу понять, почему происходит то что на скрине во вложении.
В чем тут ошибка?
Проблема состоит в том, что когда вы вводите поле структуры year

C++
1
        cin>>m[i].year;
то в буфере ввода остается символ новый строки, который туда занесен нажатием клавиши Enter.
Поэтому когда после этого выполняется функция getline., она обнаруживает этот символ и считывает пустую строку. Вам надо после ввода поля year обеспечить пропуск этого символа новой строки, например, дополнительны м вводом с помощью метода get()
2
-=ЮрА=-
Заблокирован
Автор FAQ
27.11.2011, 19:44 #3
Alexpm, достаточно cin.ignore() после cin>>m[i].year;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <string.h>
using namespace std;
 
struct WORKER 
 {
        char fio[40];
        char post[40];
        short year;
 };
 
 
int main()
{
        //setlocale (LC_ALL, "Russian");
    system("chcp 1251");
        WORKER m[4];
        for (int i=0; i<4; i++)
        {
                cout<<"Введите фамилию и инициалы:"<<endl;
                cin.getline(m[i].fio, 40, '\n');
                
                cout<<"Должность:"<<endl;
                cin.getline(m[i].post, 40, '\n');
                
                cout<<"Год поступления на работу:"<<endl;
                cin>>m[i].year;
                cin.ignore();
        }
        system("pause");
        return 0;
}
1
Миниатюры
getline() в чем дело  
Alexpm
3 / 3 / 0
Регистрация: 06.09.2011
Сообщений: 47
27.11.2011, 20:06  [ТС] #4
Все спасибо:-)
Главное причину узнал, а дальше гугл помог:
cin.sync(); //очистка буфера
удаление непрочтенных символов из stdin...
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2011, 20:06
Привет! Вот еще темы с ответами:

Пятиминутное дело!В чем ошибка? - C++
В первой строке дано неотрицательное число N- количество элементов массива (N&lt;=100). Во второй строке дано число b Заполнить массив...

Ни как не разберусь в чем дело... - C++
Подскажите что не так ругается на функцию в строке 23 говорит что &quot;результатом вычисления фрагмента не является функция, принимающая 1...

небольшая ошибка в чем дело? - C++
не компилится данная прога в с++ выдает error C2447: '{' : missing function header (old-style formal list?) в ms visual studio 2008 ...

Не понимаю в чем дело с многофайловым приложением - C++
Уважаемые форумчане, только начал изучать C++(точнее 2 день), сделал простенький алгоритм, проверяющий пару ид пользователя и пароль, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
27.11.2011, 20:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru