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

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

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

Не работает 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 символов — и Вы увидете, что оба оператора отработали.

Не работает 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

тобы исправить ошибку, вам нужно заменить строку while (cin.getline(f, str)) на while (getline(f, str)). Кроме того, вы можете добавить проверку на конец файла, чтобы выйти из цикла, когда все строки были прочитаны:
if ( f.is _open()) <
while (getline(f, str)) <
for (size_t i = 2; i < str.length(); i += 3) <
wcout >
>
f.close();
> else <
wcout >

иван савинУченик (18) 8 месяцев назад
идентификатор getline не найден
У меня работает такой код:
#include
#include
#include
using namespace std;

int main() <
setlocale(LC_ALL, «rus»);
wifstream f(«text.txt»);
wstring str;

f.imbue(locale(«»));

if ( f.is_open()) <
while (getline(f, str)) <
for (size_t i = 2; i < str.length(); i += 3) <
wcout >
wcout >
f.close();
>
else <
wcout >
return 0;
>
Только происходит транслитерация:

l
b
yo

o
a
Vo pole beryoza stoyala.
p
a
a
a
o

u
l
Vy`pila shampaskoe — upala.
Вот текст в файле:

Во поле берёза стояла. 
Выпила шампаское -- упала.

Почему после использования 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); 

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

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