Cin get не работает

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

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Не работает ни cin.Get(), ни cin.Getline()
#include «stdafx.h» #include #include «conio.h» #include «windows.h» #include.

Не работает cin.getline
#include int main() < using namespace std; char name,name2;.

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

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

Решение

Не работает getline(cin,s), istream.ignore()
Использую microsoft visual c++ 6.0. не работает: string s; getline(cin,s);//дважды приходиться.

cin, getline — не понимаю как работает
Имеем: Компилятор GNU GCC, кривые руки. Краткое описание части кода: Необходимо ввести.

cin.getline работает через раз
вот этот код работает прекрасно #include using namespace std; void Open_Directory().

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

C++ проблема с вводом, getline(cin, *p) не работает
В общем есть вот такой вот код, я хочу, что бы ввод названия компании шел после ввода диаметра, но.

При множественном наследовании не работает getline(std::cin, ?)
Изучаю множественное наследование, так вот, нужно ввести два слова, но программа просто пропускает .

Источник

Странно работает cin.get

Он почему-то не работает после того, как я делаю «cin >> чтототам», без этого все работает, а как только сделаю «cin >> чтототам», cin.get просто не работает 🙁 что делать ?

Re: Странно работает cin.get

а можно подробности узнать, как именно не работает? желательно куском кода 🙂

Re: Странно работает cin.get

Куском кода давать проблематично т.к. я не умею делать переход на новую строку в этом форуме(пытался писать
— не получилось). Я пытаюсь делать примерно так : int age; char name[20]; Потом делаю cin >> age; Это работает и работает так как надо, а потом я делаю cin.get(name, 20); — вот это уже не работает, просто не делается приглашения ввести что-то. Похоже cin >> age; забирает все до пробела, а cin.get — подбирает все, что после него, а мне надо чтобы cin.get забирал свою, независимую от cin >> строку. Получилось сделать так, между cin >> и cin.get вставить char garbage; garbage = cin.get(); — так все нормально, но мне кажется как то неправильно это.

Re: Странно работает cin.get

не понял как не работает. у меня все работает:

#include
#include
#include

int main(void) <
int age;
char name[20];
string str;

cin >> age >> name >> str;
cout ( 07.05.01 00:42:53 )

Re: Странно работает cin.get

Проверка
переноса
проверка

Re: Странно работает cin.get

Перенос работает — большое спасибо. Код не работает вот так:
#include
#include

void main(void) <
int age;
char fio[20];
cin >> age;
cin.getline(fio,20);
cout ( 07.05.01 01:01:19 )

Re: Странно работает cin.get

в общем мораль простая, cin >> age оставляет конец строки
в потоке, в результате по getline тебе прилетает пустая строчка
пока чтоб работало можешь сделать что-нить вроде:
#include
#include

void main(void) <
int age;
char fio[20],tmp;
cin >> age;
cin >> tmp;
cin.putback(tmp);
cin.getline(fio,20);
cout ( 07.05.01 03:41:58 )

Re: Странно работает cin.get

Спасибо, я в общем то так и делал, только чуть-чуть по другому:
char garbage;
garbage = cin.get();

cin.get без параметров возвращает единичный символ, похоже то что мне надо, тот самый разделитель, я потому и написал, что думал про другой способ, более правильный. Про тот случай когда вводятся данные целиком подумал, спасибо. String не использую потому, что сейчас пытаюсь разобраться с поизвольным доступом к файлу, записываю туда структуру целиком, и мне нужно чтобы были четкие размеры, а string я не вообще не особо понимаю — какие у него размеры 🙂 В общем большое спасибо, если найдешь другой способ — напиши пожалуйста.

Re: Странно работает cin.get

Структуру лучше записывать методом write, а считывать методом read. Пропускать пробелы — если я правильно помню — cin >> skipws.

Re: Странно работает cin.get

про структуры и бинарные файлы согласен с justme

про skipws все почти так, skipws в установленном сстоянии
обеспечивает пропуск пробельных символов при вводе(сам он их не извлекает)
перед данными при операциях вроде
cin >> age;
getline, get не пропускает пробелы перед вводом данных. отличаются
они тем, что getline забирает конец строчки из потока, а get — нет.

char garbage=cin.get();
работает только если после age не осталось пробелов до конца строки.
я-бы не стал на это надеяться, особенно если учесть возможность
перенаправления ввода из файла.

char tmp;
cin >> tmp;
cin.putback(tmp);
работает потому, что по-умолчанию в потоке стоит флажок skipws и все
пробелы пробелы пропускаются, в tmp кладется первый не пробел из следующей
строчки(fio), он запихивается обратно в поток и первый символ — начало
строчки. все работает, если устраивает игнорирование пробелов вначале fio.

лучше всего по-моему написать функцию выбирающюю пробелы:
#include
#include
istream& skipwhite(istream& is)
<
char c;
while(is.get(c)) <
if(!isspace(c)) <
is.putback(c);
break;
>
>
return is;
>
или аналог выбирающий пробелы до конца строчки включительно:
#include
#include
istream& skipwhite_to_eol(istream& is)
<
char c;
while(is.get(c)) <
if(isspace(c)&&iscntrl(c)) <
break;
>
if(!isspace(c)) <
is.putback(c);
break;
>
>
return is;
>

и использовать примерно так:
char fio[20];
int age;
cin >> age;
skipwhite(cin);
cin.readline(fio,20);

или при большом желании можно сделать из нее манипулятор,
как писать пока не буду, надо будет — напишу 🙂
char fio[20];
int age;
cin >> age >> skipwhite;
cin.readline(fio,20);

надеюсь на этот раз ровно то, что хотелось 🙂
ds.

PS. DOS’овские CR/LF это, как обычно, дополнительные грабли, но имхо
лучше с ними не связаваться, а конвертить предварительно файлы.

Источник

C++, cin.get(); не работает

Я не понимаю, когда я запускаю это в Visual Studio 2013, почему окно запуска исчезает. Поэтому, чтобы компенсировать это, я ввел cin.get(); но это все еще не работает. Может ли кто-нибудь объяснить мне, что я делаю неправильно и как это исправить? Имейте в виду, я очень новичок в C++.

2 ответа

У меня есть программа Win32, которая работает в цикле. Я хотел бы иметь возможность приостановить эту программу в ожидании нажатия клавиши. Не имеет значения, использую ли я ‘any key’ или определенную клавишу, но мне нужно, чтобы программа замерла, пока я что-то не нажму. Мне интересно, какую.

Сегодня я написал эту простую программу, но обнаружил, что cin.get() отказывается работать, если их не будет 2. Есть идеи? #include using namespace std; int main() < int base; while ((base 36))< cout >base; >.

Когда вы вводите число, строка

считывает число и оставляет символ новой строки во входном потоке. Когда линия

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

вы можете использовать system(«PAUSE») после cout.

Похожие вопросы:

У меня есть код, использующий cin.get( input, c ) , где c -символ разделителя. Он терпит неудачу в редких случаях, потому что есть еще один символ e, используемый в качестве побега. Итак, если c.

Во-первых, вот код: using namespace std; cout > code;.

Я новичок в C++. Я возился с созданием простой программы, которая брала два введенных вами числа и отображала ответ. Единственная проблема заключалась в том, что он закрывался слишком быстро. Я.

Источник

cin.get() не работает?

Я использую C++ впервые с PHP. Я играл с каким-то кодом. Насколько я понимаю, cin.get(); должен был остановить закрытие окна до тех пор, пока я не нажму клавишу, однако он, похоже, не работает из-за кода перед ним, я не знаю, в чем проблема. Вот мой код:

3 ответа

У меня есть код, использующий cin.get( input, c ) , где c -символ разделителя. Он терпит неудачу в редких случаях, потому что есть еще один символ e, используемый в качестве побега. Итак, если c следует за e, я хочу, чтобы cin.get перешел к следующему c , а не к сбежавшему c . В настоящее время я.

Во-первых, вот код: using namespace std; cout > code; cin.get(); cout

после >> x >> y; (или до cin.get() ).

Это очищает буфер cin и удаляет ожидающий \n , который все еще там, потому что вы cin считываете x и y, но также считываете последнее возвращение (после y). Это будет прочитано, когда вы позвоните cin.get() . Если вы очистите буфер, cin.get() увидит пустой буфер, и все будет в порядке.

Вы можете использовать

как раз перед финалом

Это отбрасывает непреднамеренное «\n», введенное как часть чтения x и y. Страница перестает закрываться до тех пор, пока по желанию не будет нажата дополнительная клавиша.

Он считывает символ новой строки, который все еще присутствует во входном потоке, поскольку предыдущее чтение может извлечь его из потока.

Он считывает только два целых числа, но не считывает символ новой строки, который был введен при нажатии кнопки.

Похожие вопросы:

Я не понимаю, когда я запускаю это в Visual Studio 2013, почему окно запуска исчезает. Поэтому, чтобы компенсировать это, я ввел cin.get(); но это все еще не работает. Может ли кто-нибудь объяснить.

Сегодня я написал эту простую программу, но обнаружил, что cin.get() отказывается работать, если их не будет 2. Есть идеи? #include using namespace std; int main()< int base; while.

#include #include using namespace std; void encyclopedia() < int choice; int choice2; system(CLS); cout >code;.

Может показаться, что это старый вопрос, но проблема здесь не в использовании TWO cin.get(), а в более чем двух! если я напишу (в DEV C++) Я получаю только один запрос input, а затем завершаю.

Когда эта часть моего кода запускается, она сразу же появляется в консоли и не дает мне возможности ввести данные для cin.get, как это было бы с cin. Во что мне нужно превратить cin.get, чтобы он.

Я написал программу, в которой я хочу принимать входные данные от пользователя , и если будет нажата какая-либо клавиша, отличная от ‘N’ или ‘n’, программа будет отображать HELLO WORLD в качестве.

Источник

cin.get() и его друзья

Функция

int istream::get();

определенная в классе istream библиотеки по определению извлекает из входного потока один символ и возвращает его целочисленный код. Популярность ей принес тот факт, что ее удобно использовать в программах с консольным интерфейсом, которые запускаются не из консоли, например, из проводника или из графического интерфейса IDE. После завершения работы программы мы не сможем увидеть ее финальный вывод, поскольку выполнится инструкция return и программа завершится, закрывая «за собой» консольное окно.

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

Проблема в том, что работает cin.get() далеко не всегда. Почему? Рассмотрим ситуацию издалека.

Начнем с того, что же такое поток (stream). Ненаучным языком говоря, поток — последовательность символов. Источником символов может служить в частности клавиатура. Символы идут один за другим:

К ним возможен только последовательный доступ, но не произвольный, иными словами, чтобы извлечь из потока символ d , надо предварительно извлечь из него a , b и c . Извлеченный (прочитанный) символ удаляется из потока.

Надо сказать, что если по каким-то причинам из потока прочитаны не все символы до конца строки (символа ‘\n’ ) включительно, то после операции чтения поток не будет пустым. Два самых распространенных способа дают нам два хороших примера.

1)
cout

Уже рассматривавшаяся выше функция get() читает из потока один символ, так что если мы ввели несколько символов, то она оставит за собой непустой поток. И следующий вызов cin.get() будет обречен на «фиаско»: программа вместо того, чтобы остановиться и ждать пользовательского ввода, прочитает из входного потока очередной символ, оставшийся от предыдущего ввода, и продолжит свое выполнение. Или завершится «без спроса». Напомню, что get() возвращает приведенный к типу int код введенного символа, поэтому мы может использовать его в вышеприведенной инструкции — код просто будет выведен на экран.

Собственно вывод: если в конце программы cin.get() не ждет пользовательского ввода, значит, вы оставили за собой непустой входной поток.

2)
int a;
cin>>a;

Перегруженный оператор сдвига, использующийся для ввода данных из потока, который в свою очередь перегружен для работы с целыми числами (так как вызван с параметром a типа int ), считывает символы, являющиеся десятичными цифрами, до тех пор, пока не встретит нецифровой символ. Это может быть пробел, буква, табуляция, конец строки, и так далее.
Все эти символы остались в потоке. Даже если вы просто ввели число и нажали Enter, символ ‘\n’ остался в потоке.

На него и «нарывается» впоследствии cin.get() .

Следующая шуточная программка позволяет воочию увидеть «обидчика». Скомпилируйте ее, запустите и введите, к примеру,

Она выведет символ, на котором «споткнулся» cin.get() .

using namespace std;

Теперь, когда проблема очевидна, рассмотрим ее возможные решения. В порядке увеличения их сложности.

1)
Функция

определенная в классе istream , извлекает из потока символы и отбрасывает их. Причем она так поступает либо с n символами, либо со всеми символами, пока в потоке не встретится символ, заданный параметром delim .

В нашем случае мы стремимся отбросить максимальное число символов, которое может содержать поток, до первого перевода строки включительно.

cin.ignore(numeric_limits ::max(), ‘\n’);

2)
streambuf* istream::rdbuf() const;
streamsize streambuf::in_avail();

У потока ввода есть буфер чтения, в котором он хранит символы. Мы обращаемся к нему, вызывая функцию rdbuf() . А любой уважающий себя буфер знает, сколько символов в нем содержится. Поскольку и мы хотим это узнать, мы вызываем функцию in_avail() этого буфера. Это количество символов нам и нужно проигнорировать, что достигается так:

cin.ignore(cin.rdbuf()->in_avail());

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

3)
int istream::sync();

Использование функции sync() — путь наименьшего сопротивления. Она просто очищает поток от имеющихся в нем символов.

Почему этот способ самый сложный — поищите в Гугле (если есть желание). А я в это время порекомендую Вам выбрать более понравившийся из первых двух и пойду заниматься более полезными делами 😉

Хотя нет, напоследок еще расскажу о функции

Источник

Читайте также:  Не работает кофемашина delonghi esam 4000
Оцените статью