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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2010, 00:14   #1
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию cin.get в while

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

using namespace std; 

int main () 
{ 
int g,sum=0;

while ( ( g=cin.get() ) != 'f' )  //вводим символ с клавиатуры, если он != f                         
	{                               // программа продолжается
		switch(g)
		{
		case 's':cout<<"bl\n";
			break;

		default:cout<<"ne-a :D\n";
			sum++;

		break;
		}

    
	}
cout<<sum<<endl;
system("pause");
return 0;
}
итак, простая программа, однако на выводе я получаю следующее:

3
ne-a :D
ne-a :D
33
ne-a :D
ne-a :D
ne-a :D
333
ne-a :D
ne-a :D
ne-a :D
ne-a :D
f
9


когда я заменяю cin.get() на getch() все в норме, а тут такое, почему так?
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery

Последний раз редактировалось Stilet; 30.09.2010 в 08:18.
kaljan775 вне форума Ответить с цитированием
Старый 30.09.2010, 08:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Видимо тебя смутили дважды повторения?
Все дело в том что cin.get() обрабатывает ввод "поблочно" а не посимвольно. И не сразу а по нажатию Энтера.
Например для введенной строки "12 34 67"+Энтер Цикл твой прокрутится 6 раз.
Сначала get() вернет "12" потом пробел (не останавливая цикл, ибо пробел и 12 не равно "f"), потом сразу же 34, потом опять пробел и так пока строка не закончится энтером.
Этот метод парсит введенную строку, потому для посимвольной обработки он не подходит в обычном виде.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2010, 08:53   #3
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Запусти такой код:
Код:
char g;

while ( ( g=cin.get() ) != 'f' )                    
	cout << '<' << g << '>';
Ввод: e
Вывод:
<e><
>

Пояснения требуются?
coinkrsk вне форума Ответить с цитированием
Старый 30.09.2010, 09:04   #4
coinkrsk
пыжашийся нуб
Пользователь
 
Регистрация: 19.06.2010
Сообщений: 93
По умолчанию

Stilet перепутал. Метод как раз посимвольно читает.
Если запустишь код выше, то увидишт, что для "12 34 67" будет даже не 6 запусков, а 9.
Ввод: 12 34 67
Вывод: <1><2>< ><3><4>< ><6><7><
>
coinkrsk вне форума Ответить с цитированием
Старый 30.09.2010, 10:01   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да. Перепутал. Согласен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.09.2010, 14:39   #6
ололошенько
Заблокирован
 
Регистрация: 10.08.2010
Сообщений: 566
По умолчанию

я чуть чуть переделал,получилось следущее:
Код:
#include <iostream.h>
#include <tchar.h>
#include <stdlib.h>
#include <conio.h>


main()
{
int g,sum=0;

while ( g!= 0)  //вводим символ с клавиатуры, если он != f
	{
		cin>>g;
									// программа продолжается
		switch(g)
		{
			case '9':
			cout<<"olo";
			break;

			default:
			++sum;
			cout<<"ne-a :D\n";
			break;
		}

	}
cout<<sum<<endl;
system("pause");
return 0;
}
и выдаёт следущее:
3
ne-a :D
2
ne-a :D
1
ne-a :D
0

4 //типа сумма
ололошенько вне форума Ответить с цитированием
Старый 30.09.2010, 14:59   #7
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

мне хватило бы и объяснения что cin.get() обрабатывает все вводимые символы. и энтер тоже спасибо за разъяснения
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cin _-Re@l-_ Общие вопросы C/C++ 8 25.06.2010 23:17
cin ReaktiV Общие вопросы C/C++ 3 31.05.2010 15:57
istringstream() и cin>> Amadeo Общие вопросы C/C++ 2 08.04.2010 13:38
cin??? Paul_AG Общие вопросы C/C++ 4 24.04.2009 14:02
Не опознается cin Stellvertreter Общие вопросы C/C++ 5 14.10.2008 08:10