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

getchar() в linux - C++

Восстановить пароль Регистрация
 
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
29.07.2013, 11:48     getchar() в linux #1
Здравствуйте! Я создал небольшую консольную программу. Сначала мне нужно ввести данные с помощью cin и нажать Enter. Сразу после cin у меня идет команда getchar(), но она, вместо того, чтобы ждать нажатия клавиши, записывает Enter, который я нажал при вводе данных через cin. Как решить эту проблему, и почему так происходит? Пожалуйста помогите.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2013, 11:48     getchar() в linux
Посмотрите здесь:

C++ getchar
C++ getchar ()
[C++] аналог getchar() C++
C++ Getchar и putchar EOF
Getchar и putchar тип данных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 11:49     getchar() в linux #2
cin пропускает все whitespace, поэтому твой нажатый enter и остается в буффере. Можешь очистить cin, либо сделать еще getch
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2013, 11:52     getchar() в linux #3
getchar ставят чтобы посмотреть результат программы до закрытия окна консоли, значит Вы пишете под винду, юзайте
C++
1
system("pause");
и такой проблемы больше не будет
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
29.07.2013, 11:54  [ТС]     getchar() в linux #4
Цитата Сообщение от Dani Посмотреть сообщение
cin пропускает все whitespace, поэтому твой нажатый enter и остается в буффере. Можешь очистить cin, либо сделать еще getch
Что значит очистить cin? Я просто новичок
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
29.07.2013, 11:56     getchar() в linux #5
скорее всего написать
C++
1
cin.clear();
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 11:59     getchar() в linux #6
StasyanKO, раз новичек - просто юзай system("pause"), если не спасет, то пробуй
C++
1
cin.clear(); cin.sync();
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
29.07.2013, 12:02  [ТС]     getchar() в linux #7
Спасибо большое! Разобрался
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
29.07.2013, 22:05     getchar() в linux #8
Цитата Сообщение от Dani Посмотреть сообщение
StasyanKO, раз новичек - просто юзай system("pause"), если не спасет, то пробуй
C++
1
cin.clear(); cin.sync();
sync() под Linux'ом работает не так, как ожидается. И стандарт говорит, что он зависим от реализации.

Не по теме:

P.S. "спасибо" случайно жамкнул, ну да ладно)

alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.07.2013, 22:46     getchar() в linux #9
Цитата Сообщение от aLarman Посмотреть сообщение
скорее всего написать:
C++
1
cin.clear();
cin.clear() не очищает поток (не освобождает от символов, которые в нём есть), флаги потока сбрасывает. Про sync() в Linux уже написали, пробовал, не работает (может зависит от реализации). Самое простое, для остановки, в этом случае, два getchar(). В более сложных случаях можно так:
C++
1
2
cin.clear();
while (cin.get() != '\n'); // очистка потока
или cin.ignore() использовать. Вариантов много.
Можно здесь почитать: http://cppstudy.wordpress.com/2009/0...in-get-and-co/
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
30.07.2013, 09:28  [ТС]     getchar() в linux #10
Я просто добавил лишний getchar(); и все заработало, как надо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 12:46     getchar() в linux
Еще ссылки по теме:

C++ Функция getchar!
функции getchar() и putchar() C++
как работает getchar() ? C++

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

Или воспользуйтесь поиском по форуму:
aLarman
30.07.2013, 12:46     getchar() в linux
  #11

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
cin.clear() не очищает поток (не освобождает от символов, которые в нём есть), флаги потока сбрасывает. Про sync() в Linux уже написали, пробовал, не работает (может зависит от реализации). Самое простое, для остановки, в этом случае, два getchar(). В более сложных случаях можно так:
сори, я не силен в этом, просто предположил что этот метод как раз и занимается чисткой

Yandex
Объявления
30.07.2013, 12:46     getchar() в linux
Ответ Создать тему
Опции темы

Текущее время: 00:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru