С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
#1

getchar() в linux - C++

29.07.2013, 11:48. Просмотров 1111. Ответов 10
Метки нет (Все метки)

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

getchar () - C++
a = getchar (); if ( a == 'q' ) // действие 1 a = getchar (); if ( a == 'w' ) // действие 2 Почему не работает такая...

getchar - C++
Не пойму почему getchar 2-ой раз запрашивает ввести строку, я же написал в цикле условие, что выполняется, если ch!=10 char ch=0; for...

Getline, getchar - C++
Подскажите пожалуйста, как я поняла getline это шаблон функции, который построчно извлекает строки из выходного потока, но что делается...

[C++] аналог getchar() - C++
привет ВСЕМ, ЗАДАЧА: Найти периметр и площадь равнобедренной трапеции с основаниями a и b (a > b) и углом alpha при большем основании...

Функция getchar! - C++
Здравствуйте, поясните на пальцах, что делает данная программа? #include <stdio.h> int main(void) { char ch; printf("Enter...

Функция getchar() в С++ - C++
#include <iostream> // для оператора cout #include <cctype> // для функции islower #include <cmath> //для математич. вычислений ...

10
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 11:49 #2
cin пропускает все whitespace, поэтому твой нажатый enter и остается в буффере. Можешь очистить cin, либо сделать еще getch
1
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
29.07.2013, 11:52 #3
getchar ставят чтобы посмотреть результат программы до закрытия окна консоли, значит Вы пишете под винду, юзайте
C++
1
system("pause");
и такой проблемы больше не будет
1
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
29.07.2013, 11:54  [ТС] #4
Цитата Сообщение от Dani Посмотреть сообщение
cin пропускает все whitespace, поэтому твой нажатый enter и остается в буффере. Можешь очистить cin, либо сделать еще getch
Что значит очистить cin? Я просто новичок
0
aLarman
643 / 564 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
Завершенные тесты: 1
29.07.2013, 11:56 #5
скорее всего написать
C++
1
cin.clear();
1
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 11:59 #6
StasyanKO, раз новичек - просто юзай system("pause"), если не спасет, то пробуй
C++
1
cin.clear(); cin.sync();
2
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
29.07.2013, 12:02  [ТС] #7
Спасибо большое! Разобрался
0
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,389
Записей в блоге: 2
Завершенные тесты: 1
29.07.2013, 22:05 #8
Цитата Сообщение от Dani Посмотреть сообщение
StasyanKO, раз новичек - просто юзай system("pause"), если не спасет, то пробуй
C++
1
cin.clear(); cin.sync();
sync() под Linux'ом работает не так, как ожидается. И стандарт говорит, что он зависим от реализации.

Не по теме:

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

0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.07.2013, 22:46 #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/03/27/cin-get-and-co/
0
StasyanKO
9 / 9 / 0
Регистрация: 13.04.2013
Сообщений: 63
30.07.2013, 09:28  [ТС] #10
Я просто добавил лишний getchar(); и все заработало, как надо
0
aLarman
30.07.2013, 12:46     getchar() в linux
  #11

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2013, 12:46
Привет! Вот еще темы с ответами:

функции getchar() и putchar() - C++
Здравствуйте всем. Такая вот задачка: Есть вот такой код: #include <iostream> #include <conio.h> using namespace std; ...

как работает getchar() ? - C++
int c; c=getchar(); cout << c; Набираю на клаве число 123 Cout выдает число 49 ??? Добавлено через 1 минуту из-за нажатия...

Getchar и putchar EOF - C++
Подскажите что за символ такой EOF? Чисто догадываясь это 0, но не работает. #include <stdio.h> int main() { int c; while((c...

Почему-то перестал работать getchar() - C++
Чтобы окно после выполнения программы сразу не закрывалось, я использовала getchar(). Теперь же он не срабатывает, программа закрывается и...


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

Или воспользуйтесь поиском по форуму:
11
30.07.2013, 12:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.