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

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

Войти
Регистрация
Восстановить пароль
 
BuPy7
Нет ТЗ - давай досвидания
730 / 357 / 35
Регистрация: 01.12.2011
Сообщений: 2,148
#1

Почему игнорируется cin.getline() в классе? - C++

19.10.2012, 18:15. Просмотров 706. Ответов 5
Метки нет (Все метки)

Вот конструктор класса. При вызове конструктора создаётся односвязный список и данные вводятся с клавиатуры. Почему-то не работает функция cin.getline()...Я конечно могу ввести все нужные данные в главном блоке программы и передать в параметры конструктора, но это не дело. Я хочу разобраться почему так и как решить данную проблему?
При отладке чётко видно, что курсор проходит по оператору не делая запрос на считывания данных с клавиатуры. При этом переменная Task пустая, поэтому я исключаю то, что был считан мусор из буфера при прошлом вводе данных.

Строка #8:
Task имеет тип char.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
KNotebook::KNotebook()
{
    FlowingKnot = new record;       //инициализируем узел с пометкой "текущий"
 
    cin >> FlowingKnot -> Day;              //день
    cin >> FlowingKnot -> Month;            //месяц
    cin >> FlowingKnot -> Week;             //день недели
    cin.getline(FlowingKnot -> Task, 100);      //задание
 
    FlowingKnot -> NextKnot = NULL;     //передаём указатель на следующий узел
    FirstKnot = FlowingKnot;            //указываем, что это первый элемент в списке
 
    return;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2012, 18:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему игнорируется cin.getline() в классе? (C++):

Почему портится поток cin при использовании функции getline - C++
char a; cin.getline(a,5); cin.clear(); При вводе свыше 5 символов после функции getline надо вызывать функцию clear() иначе...

Почему при использовании getline( std::cin, str ) строка считывается не так, как ожидается? - C++
Цель программы: При вводе строки, подсчитывает количество гласных букв. Проблема: При вводе количества строк, сразу выдает 0 букв, а...

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода - C++
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть какие-нибудь замечания, то просьба написать что не...

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами - C++
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get и cin.getline с тремя параметрами, как из потока достать...

Отличие функции cin.get и cin.getline - C++
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get считывает символ разрыва строк и оставляет...

Отличие getline() от cin.getline() - C++
Чем отличается getline() от cin.getline() ?

5
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 18:23 #2
После cin, перед getline(), сделайте cin.get();
1
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
19.10.2012, 18:26 #3
C++
1
fflush(stdin);
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 18:27 #4
После cin >> в потоке ввода остаётся символ новой строки '\n' (попадаёт в поток после нажатия Enter). getline() считывает его первым символом. Для неё это пустая строка. В строку ввода помещается '\0' и код идёт дальше. cin.get() извлечёт '\n' из потока.
1
BuPy7
Нет ТЗ - давай досвидания
730 / 357 / 35
Регистрация: 01.12.2011
Сообщений: 2,148
19.10.2012, 18:29  [ТС] #5
О, заработало. Спасибо огромнейшее!
Спасибо за объяснение! Очень помогли!
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.10.2012, 18:31 #6
Ещё можно вот так: (cin >> FlowingKnot -> Week).get();
1
19.10.2012, 18:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2012, 18:31
Привет! Вот еще темы с ответами:

getline(cin, str) и cin>> - C++
Добрый день. Есть код: ... string str; int N; cin>> N; getline(cin, str); cout<<str<<endl; //Выводит: <пустота> ...

cin.getline и cin.ignore - C++
Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то теряется первый вводимый символ начиная со второго входа в for....

Cin вместо cin.getline - C++
#include <stdlib.h> #include <string.h> #include <fstream> using namespace std; int get_int(int default_value); char name; ...

Не работает ни cin.Get(), ни cin.Getline() - C++
#include "stdafx.h" #include <iostream> #include "conio.h" #include "windows.h" #include "string.h" using namespace::std; const...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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