@Sushkov
">alert("yohoho")

В чем отличие getchar() и getch() в C++ ?

Начал изучать С++ и наткнулся на проблему , которую в скором времени решил.
Когда код выглядит так:
#include "stdafx.h";
#include <iostream>;

using namespace std;
int main()
{
	int a = 10;	
	cout << a;
	getchar();
}

то getchar() все делает как надо и ждет ввода с консоли,но стоит сделать так:
#include "stdafx.h";
#include <iostream>;

using namespace std;
int main()
{
	int a = 10;
	cin >> a;
	cout << a;
	getchar();
}

и getchar() не работает. Так вот что же в нем такого??? И что такого в getch() что он справляется?? И вообще какая между ними разница??
  • Вопрос задан
  • 12312 просмотров
Решения вопроса 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert

cin >> a;
	cout << a;
	getchar();

Как минимум enter, которым был завершён ввод числа a, остался в буфере stdin.
Можно использовать fflush(stdin); getchar();
А лучше выкинуть совсем этот пережиток ДОС и запускать своё приложение в нормальном терминале.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
stdin видимо не пустой и getchar успешно возвращает первый char из оного. Посмотрите что getchar возвращает.
Ответ написан
Комментировать
getchar не работает, потому что после "cin >> a" во входном потоке, скорее всего, остался непрочитанным '\n' (и правда, зачем его читать, если читаешь число), вызов getchar как раз его из потока и забирает (вам повезло и cin оказался синхронизован с stdin).

Вы можете проверить это, например, заменив "getchar()", на "cout << getchar()" и посмотреть код символа, который был прочитан и сравнить его с '\n'. Или, например, воткнуть перед getchar такую штуку "ws(cin)" (она съедает все пробельные символы из cin) и после этого getchar, по идее, должен работать так как вы и ожидали.

Почему getch работает в этой ситуации правильно стоит смотреть в документации к компилятору, так как getch все-таки не стандартная функция. Рискну предположить, что она ожидает именно нажатия клавиатуры (но это только догадка).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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