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

cin.getline() не выполняется - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
PCJakeD
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 19
05.12.2011, 17:39     cin.getline() не выполняется #1
В коде ниже не выполняется cin.getline(), просто пропускает и начинает выполнять следующую строку (0.png то что получается).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    form z; // структура
 
    cout<<"Number: ";
        cin>>(z.NUM);
    cout<<"FIO: ";
        cin.getline(z.FIO,15);
    cout<<"DATE: ";
        cin>>(z.DATE);
    cout<<"SEX m/f: ";
        cin.getline(z.SEX,1);
    cout<<"Family t/f: ";
        cin.getline(z.FAMILY,1);
    cout<<"Children: ";
        cin>>(z.CHILDREN);
    cout<<"Pay: ";
        cin>>(z.PAY);
 
    return z;
код структуры:
C++
1
2
3
4
5
6
7
8
9
10
struct form {
    int NUM;
    char FIO[15];
    time_t DATE;
    char SEX[1];
    char FAMILY[1];
    int CHILDREN;
    float PAY;
    form *next;
};
Находил что нужно после cin>>... написать cin.clear(); и cin.sync(); толку нет.
Видел вариант что перед cin.getline(); надо написать cin.ignore(); та же ситуация.

Может кто рассказать в чем проблема, почему он пропускает cin.getline(); ?
Буду благодарен.
Изображения
 
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2011, 17:39     cin.getline() не выполняется
Посмотрите здесь:

cin.getline() C++
getline(cin, str) и cin>> C++
C++ Отличие функции cin.get и cin.getline
cin.getline и cin.ignore C++
C++ Cin вместо cin.getline
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kapr
Сообщений: n/a
05.12.2011, 17:48     cin.getline() не выполняется #2
Если перед cin.getline() был любой cin, то перед ним нужно поставить cin.ignore(). То есть тебе перед каждым cin.getline() надо поставить cin.ignore()
PCJakeD
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 19
05.12.2011, 17:57  [ТС]     cin.getline() не выполняется #3
Цитата Сообщение от kapr Посмотреть сообщение
Если перед cin.getline() был любой cin, то перед ним нужно поставить cin.ignore(). То есть тебе перед каждым cin.getline() надо поставить cin.ignore()
Вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    form z;
 
    cout<<"Number: ";
        cin>>(z.NUM);
    cout<<"FIO: ";
        cin.ignore();
        cin.getline(z.FIO,15);
    cout<<"DATE: ";
        cin>>(z.DATE);
    cout<<"SEX m/f: ";
        cin.ignore();
        cin.getline(z.SEX,1);
    cout<<"Family t/f: ";
                cin.ignore();
        cin.getline(z.FAMILY,1);
    cout<<"Children: ";
        cin>>(z.CHILDREN);
    cout<<"Pay: ";
        cin>>(z.PAY);
 
    return z;
На скриншоте что получилось.
Получилось он пропустил только "SEX m/f".
Изображения
 
Ya
2 / 2 / 0
Регистрация: 05.12.2011
Сообщений: 23
05.12.2011, 17:58     cin.getline() не выполняется #4
char SEX[1]
выделение памяти на 1 символ не верно, т.к. в конец строки записывается /0 (символ конца строки),
поэтому минимум на 2.
PCJakeD
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 19
05.12.2011, 18:06  [ТС]     cin.getline() не выполняется #5
Цитата Сообщение от Ya Посмотреть сообщение
char SEX[1]
выделение памяти на 1 символ не верно, т.к. в конец строки записывается /0 (символ конца строки),
поэтому минимум на 2.
А вот сейчас сижу и думаю как я мог написать 1, сам не понимаю.

Все, изменил 1 на 2 и оставил cin.ignore(); это решило мою проблему.
Всем спасибо.
GraBLYA
-46 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 62
29.01.2014, 17:03     cin.getline() не выполняется #6
А можно пожалуйста по подробней чем же cin.ignore() решает все наши проблемы??
Yandex
Объявления
29.01.2014, 17:03     cin.getline() не выполняется
Ответ Создать тему
Опции темы

Текущее время: 01:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru