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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
PCJakeD
0 / 0 / 0
Регистрация: 02.12.2011
Сообщений: 19
#1

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

05.12.2011, 17:39. Просмотров 1841. Ответов 5
Метки нет (Все метки)

В коде ниже не выполняется 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++
есть простенькая программа #include &lt;iostream&gt; using namespace std; struct note { char fi; int number; int dob; }; int...

getline(cin, ); - C++
Программа создаёт текстовый документ в который записывает название, автора и кол-во проданных экземпляров книги. Вот только возникла...

cin.getline - C++
Здравствуйте. Есть вот программа: #include &lt;iostream&gt; // #include &lt;cmath&gt; // #include &lt;conio.h&gt; // //...

cin.getline скушал - C++
Вот ставлю чтоб ввёл 5 строк а даёт только 4, съедает 1 строку самую первую как это починить? char **s = new char* ; for(int i = 0; i...

Функция getline(cin,.) - C++
Здравствуйте уважаемые программисты. По темам пробежался getline(), но чет не понял, проблема, почему при вводе данных о первом человеке...

Setlocal и cin.getline - C++
Привет Всем! У меня такая задачка. В начале программы setlocale(LC_ALL,&quot;rus&quot;) чтоб консоль русские буквы понимала, но по ходу программы мне...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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(); это решило мою проблему.
Всем спасибо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2014, 17:03     cin.getline() не выполняется
Еще ссылки по теме:

Функция cin.getline() - C++
Имеется часть кода: void EditName(Account &amp;acc) { delete acc.name; char nam; cout&lt;&lt;&quot;Введите новое имя: &quot;; ...

Проблема с cin.getline(); - C++
Есть вопрос по поводу использования cin.getline() после cin: cin&gt;&gt; n; char c; cin.getline(c, buf); Почему можно ввести...

Пропускается cin.getline - C++
Здравствуйте. Функция поиска void search() { char str; int arr_1, arr_2,col_rezult = 0; int on_name = 0; int on_autor =...

Друзья getline и cin.ignore - C++
Постараюсь как можно более точно обрисовать проблему. Имеется string * v1 = new string; string * v2 = new string; string * v3 = new...

Интересное поведение cin.getline(); - C++
Доброго времени суток! Я не устаю терроризировать форум своими тупыми вопросами, но для этого он и создан. На этот раз у меня проблема с...

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


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

Или воспользуйтесь поиском по форуму:
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() не выполняется
Ответ Создать тему
Опции темы

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