Почему после использования cin функции cin.get() и cin.getline() не работают, а последующие вызовы cin срабатывают?
Насколько я знаю cin оставляет символ ‘\n’ в потоке из-за чего последующие вызовы cin.get() и cin.getline() не будут срабатывать, поскольку они будут натыкаться на символ перевода строки и завершать свою работу. Для того, чтобы функции cin.get() и cin.getline() успешно работали после cin >> нужно «выбросить» ‘\n’ из потока при помощи cin.get() или cin.ignore(numeric_limits
Вопрос: почему cin будет работать и без «очищения» потока от символа ‘\n’?
Т.е. я имею в виду, что этот код будет работать без cin.get() или cin.ignore():
char str1[80], str2[80]; cin >> str1; cin >> str2;
А этот нет:
char str1[80], str2[80]; cin >> str1; cin.getline(str2, 80);
Не работает getline в case
Здраствуйте, у меня проблема с оператором getline в case — он попросту пропускается когда надо вводить текст . уже второй день над етим бьюсь и ничего сделать немогу .
switch(opt) <
case 1:
<
std::string text;
std::getline(std::cin, text);
for(int i = 0; (unsigned int)i < text.size(); i++) <
if((char)text != ‘ ‘) <
std::cout > else <
std::cout >
>
std::cout >
break;
case 2:
<
std::ifstream inputfile;
inputfile.open(«forencode.txt»);
if(inputfile.is_open()) <
std::string text;
std::getline(inputfile, text);
inputfile.close();
std::ofstream outputfile;
outputfile.open(«encoded.txt»);
if(outputfile.is_open()) <
for(unsigned long int i = 0; (unsigned int)i < text.size(); i++) <
outputfile >
outputfile.close();
> else <
exit(EXIT_FAILURE);
>
> else <
exit(EXIT_FAILURE);
>
>
break;
default:
<
std::cout exit(EXIT_FAILURE);
>
>
Может вы подскажите с чем проблема?
Почему getline не работает после cin c
Начал недавно изучать C++. В данном примере не могу понять почему не работает cin.getline. Если мы его выносим из switch то все работает хорошо.
using std::cout;
using std::cin;
using std::endl;
int main()
setlocale(0, «»);
int s;
bool p = true;
char a[10];
| Сергей_Якутин |
| Посмотреть профиль |
| Найти ещё сообщения от Сергей_Якутин |
| Похожие темы | ||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Проблема с cin.getline(); | Nullerset | Общие вопросы C/C++ | 1 | 21.10.2013 00:29 |
| string, cin.getline() не понимаю. | Arantir# | Помощь студентам | 4 | 01.12.2012 16:01 |
| cin.getline и gets() | iceman2112 | Общие вопросы C/C++ | 3 | 14.11.2012 14:33 |
| cin.getline | Intess | Общие вопросы C/C++ | 1 | 20.03.2012 15:22 |
| C++ cin.getline. Исправьте ошибку | Jane-sad | Помощь студентам | 0 | 18.02.2011 15:46 |
Почему getline не работает после cin c
Проблема в следующем:
заношу данные в переменную с помощью оператора >>
Но потом в цикле при вызове функции getline она при первом вызове не работает вообще, тоесть при отладке компилятор даже не передает управление программе, чтобы я ввел число
П.С. Когда-то эту проблему решал вызов какой-то функции перед вызовом getline, но эту функцию я забыл
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
cin.ignore(); // or cin.sync(); // перед getline
Форумчанин
Регистрация: 10.10.2009
Сообщений: 680
Сообщение от AxenicX
Проблема в следующем:
заношу данные в переменную с помощью оператора >>
Но потом в цикле при вызове функции getline она при первом вызове не работает вообще, тоесть при отладке компилятор даже не передает управление программе, чтобы я ввел число
П.С. Когда-то эту проблему решал вызов какой-то функции перед вызовом getline, но эту функцию я забыл
Не знаю, правильно ли я понял, в чем проблема. Если да, то есть такой вариант: после считывания переменной мы ведь остаемся в той же строке, где была переменная. Если надо считать полностью следующую строку, то проблемка есть, теоретически считывается «getline» до конца текущая строка. Поэтому первый getline работает нестандартно — он считывает до конца строку, в которой мы были и перенос на следующую строку (даже если в текущей мы уже вконце, в следующую мы ведь еще не попали). Можно дописать лишний getline перед циклом и должно заработать.