Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2011, 12:13   #1
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Стрелка

Добрый день.

Помогите разобраться, вот две программы, они почти одинаковы, но должны различаться только тем, что при вводе символа в первой программе Enter жать не надо (т.к. используется getche()), а во второй без этого не обойтись (т.к. используется cin <<)

Это я понял из описания функции getche()

Но не все так просто, в первой программе, после срабатывания оператора getche() должен выполниться if, но нет, программа настойчиво требует ввод символов (как будто getche зациклился), и только когда жмешь Enter, одним разом выводится все, что должно было вывестись раньше.

Код:
#include <iostream.h>
#include <conio.h>

int main()
{
	char ch='a';
	while(ch!='\r'){
	ch=getche();
	if(ch=='q') cout << "wewe";
	else cout << "12";
	}
	return 0;
}

Код:
#include <iostream.h>
#include <conio.h>

int main()
{
	char ch='a';
	while(ch!='\r'){
	cin >> ch;
	if(ch=='q') cout << "wewe";
	else cout << "12";
	}
	return 0;
}
Помогите пожалуйста разобраться с первой функцией!

Последний раз редактировалось Stilet; 26.06.2011 в 18:14.
sir.andrey вне форума Ответить с цитированием
Старый 26.06.2011, 17:58   #2
Jaguar83
Профессионал
Пользователь
 
Аватар для Jaguar83
 
Регистрация: 25.05.2011
Сообщений: 91
По умолчанию

не понятна суть проблемы.
Запустил 1-ую программу на исполнение. Если нажимаешь любой символ,
кроме '\r' и 'q', выводятся считанный функцией getche символ + добавляются "12", т.е. оператор if здесь работает. А как должно быть?
Помог? Будь человеком - жми на весы слева!
Jaguar83 вне форума Ответить с цитированием
Старый 26.06.2011, 18:20   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не понятна суть проблемы.
Согласен. Автор затупил или чего-то недопонял. У меня тоже программа же требует жатия Энтера.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.06.2011, 18:41   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Могу лишь догадываться, но может быть ситуацию исправит сброс потока вывода, после каждой операции вывода?
Код:
cout << "wewe" << flush;
...
cout << "12" << flush;
netrino вне форума Ответить с цитированием
Старый 28.06.2011, 15:56   #5
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость

Цитата:
Сообщение от Stilet Посмотреть сообщение
Согласен. Автор затупил или чего-то недопонял. У меня тоже программа же требует жатия Энтера.
Эх... Постараюсь по подробнее!

После захода в цикл While в первой программе мы просто вводим символ, а во второй вводим и жмем Enter, далее в первой программе идет оператор if, но COUT не срабатывает, точнее как я понимаю не заходит даже в if, можно вводить еще символы, а когда нажмем Enter, в зависимости от количества введенных символов выскочит примерно такая картина:
qrtywewe121212
qrty-это введенные мной символы
А во второй программе картина такая:
qwewer12t12y12
sir.andrey вне форума Ответить с цитированием
Старый 28.06.2011, 16:34   #6
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Могу лишь догадываться, но может быть ситуацию исправит сброс потока вывода, после каждой операции вывода?
Код:
cout << "wewe" << flush;
...
cout << "12" << flush;
Какой заголовочный для flush нужен?
sir.andrey вне форума Ответить с цитированием
Старый 28.06.2011, 17:34   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от sir.andrey Посмотреть сообщение
Какой заголовочный для flush нужен?
iostream, как и для cout
netrino вне форума Ответить с цитированием
Старый 28.06.2011, 17:40   #8
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость

Цитата:
Сообщение от netrino Посмотреть сообщение
iostream, как и для cout
Блин, ну ни чего себе, заработало , спасибо большое!

А можно по подробнее описать всю суть происходящего, почему у меня coutы заработали?
sir.andrey вне форума Ответить с цитированием
Старый 28.06.2011, 18:39   #9
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Потому что при выводе, информация сначала попадает в буфер, а потом уже на экран. Манипуляторы flush и endl производят сброс буфера потока вывода, форсируя вывод информации на экран.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аналог getche() в Linux tim88 Общие вопросы C/C++ 4 13.01.2010 05:37
Использование метода getche() Golovastik Общие вопросы C/C++ 4 17.07.2009 20:22