Почему getline не работает после cin c
Перейти к содержимому

Почему getline не работает после cin c

  • автор:

Почему после использования cin функции cin.get() и cin.getline() не работают, а последующие вызовы cin срабатывают?

Насколько я знаю cin оставляет символ ‘\n’ в потоке из-за чего последующие вызовы cin.get() и cin.getline() не будут срабатывать, поскольку они будут натыкаться на символ перевода строки и завершать свою работу. Для того, чтобы функции cin.get() и cin.getline() успешно работали после cin >> нужно «выбросить» ‘\n’ из потока при помощи cin.get() или cin.ignore(numeric_limits::max(), ‘\n’) .

Вопрос: почему 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

Всем привет!
Ситуация следующая, не срабатывает cin.getline, т.е. программа вместо того чтобы остановится, для ввода данных, просто переходит на следующую строку.
Но если убрать строки

cin. getline (q,2);
p=q[0]- ‘0’ ;
for (i=0; i if (key[0]==Alfa[i])
>

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

cin. getline (q,2);
p=q[0]- ‘0’ ;

//определение позиции начала записи ключа

// for (i=0; i // // if (key[0]==Alfa[i])
// >

//записываем ключ в новый массив
for (i=p, j=0; i beta[i]=key[j];
>

//заполнение шифрованного масива остальными буквами после конца ключа
for (i=p+k, j=0; i for (z=0; z if (Alfa[j]==key[z])
beta[i]=Alfa[j];
>

//заполнение шифрованного массива перед началом ключа
for (i=0, j=j-1; i for (z=0; z if (Alfa[j]==key[z])
beta[i]=Alfa[j];
>

cin. getline (A,1000);

автор: shtirlitz (15.11.2008 в 11:59) письмо автору

проблема решена,
спасибо за внимание,
если у кого, такая же проблема, то перед строкой, где не срабатывает cin.getline
вставьте следующий код:

cin. ignore ();

и будет вам счастье!

автор: AlMag (15.11.2008 в 23:08) письмо автору

спасибо за информацю

автор: StarWorm (17.11.2008 в 03:07) письмо автору

Ого. Спасибо! 🙂
А то я недавно как раз долго не знал что и предпринять. Весь инет облазил, но так и не понял!
Проблема была в том, что после

cin>>variable

у меня не работала

cin. getline (str,255)

Хотя то же самое происходило и со

если после него было что то наподобие

Но если их поменять местами, то все работало нормально.
Теперь все решено! Еще раз спасибо! xD RESPECT

Не работает cin.getline

Author24 — интернет-сервис помощи студентам

Не работает cin.getline(name2, 3). Компилятор его тупо пропускает.

Добавлено через 4 минуты
первый cin.getline(name,3); работает нормально

Лучшие ответы ( 3 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

cin.getline как работает?
Здравствуйте, в моей программе я столкнулся с некоторой проблемой. В переменную place я хочу.

Не работает cin.getline(buf, 20);
Товарищи подскажите почему не работает cin.getline(buf, 20);? Проблема в том что я хочу ограничить.

Не работает. cin.getline(string,200);
Я создаю проект. Все работает кроме одного cin.getline(string,200), почему? Когда запускаю этот.

167 / 107 / 22
Регистрация: 02.01.2012
Сообщений: 596

Лучший ответ

Сообщение было отмечено FGlomgold как решение

Решение

ЦитатаСообщение от FGlomgold Посмотреть сообщение

Компилятор его тупо пропускает.

Нет. Просто после первого getline в буфере ввода остаётся символ конца строки, поэтому второй сразу завершается.
Попробуйте, например, ввести сразу 6 символов — и Вы увидете, что оба оператора отработали.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *