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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2015, 01:42   #1
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
Злость Считывание файлов


Я уже плачу, не могу разобраться в чём дело.
Всё что мне нужно, проверить правильность ввода данных и это же число проверить, равно ли оно ну например 0.1, 0.2, 0.3.
Если введено число и оно равно одному из этих 3х - идти дальше, нет - повторить.

Раньше ЭТОТ код работал, теперь - нет, ума не приложу в чём дело, подскажите, пожалуйста.
Может чё с потоками не так, подскажите, возможно другой способ ввода и проверки вводимых данных (хотя этот раньше всегда работал на ура и без минусов).

Код:
float f;
	cout<<"enter"<<endl;
	while ((scanf("%f",&f))!=1 || f!=0.1 || f!=0.2 || f!=0.3 )
	{
		printf("\n Error. Try again:\n >>");
		fflush(stdin);
		fflush(stdout);
	} 

	printf("%2.2f",f);
	_getch();

Последний раз редактировалось Stilet; 21.09.2015 в 07:05.
guroDragon вне форума Ответить с цитированием
Старый 21.09.2015, 07:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
(scanf("%f",&f))!=1
Проверка тебе скорее всего мешает.
Тебе наверное по другому стоит построить программу в два цикла. Один проверяет ввод, другой проверяет введенное
Код:
    for(;;){
        if(scanf("%f",&f)!=1){
            printf("\n Error not float. Try again:\n >>");
            continue;
        };
        if(f==0.1 || f==0.2 || f==0.3 ) break;
        printf("\n Error not correct num. Try again:\n >>");
    }
Я бы так делал. И еще момент: Проверь в отладчике - возможно у тебя просто вводится число не совсем правильно. Бывает такое, что процессор неправильно интерпретирует введенное вещественное, потому и сравнение не срабатывает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.09.2015, 11:41   #3
guroDragon
Пользователь
 
Регистрация: 09.09.2013
Сообщений: 83
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Проверка тебе скорее всего мешает.
Тебе наверное по другому стоит построить программу в два цикла. Один проверяет ввод, другой проверяет введенное

Я бы так делал. И еще момент: Проверь в отладчике - возможно у тебя просто вводится число не совсем правильно. Бывает такое, что процессор неправильно интерпретирует введенное вещественное, потому и сравнение не срабатывает.

Вот, блин, заработало, чуть по кривому, но всё же.
Код:
float f(0);
	std::cout<<"Enter";
	for(;;){
		  while (scanf("%f",&f)!=1){
			  fflush(stdin);
			  fflush(stdout);
   			std::cout<<"Error!!!! Enter";
		   }
		  if ((f*10)==1 || (f*10)==2 || (f*10)==3) break;
		  else std::cout<<"Error!!!!";
	}
Работает всё только благодаря тому, что я умножил f на десять. Если бы я записал не 1, а 0.1 без умножение f, то оно бы не хреначило нормально.
Подскажите почему так?((

Последний раз редактировалось guroDragon; 21.09.2015 в 14:57.
guroDragon вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Считывание имён файлов dobrohleb Microsoft Office Excel 21 06.09.2012 11:35
Сохранение и считывание файлов в стринггриде nimbus2000 Помощь студентам 17 15.04.2012 19:26
Считывание бинарных файлов pufystyj Общие вопросы C/C++ 2 11.02.2012 22:02
Создание и считывание .ini файлов Патрон Общие вопросы Delphi 4 21.04.2008 03:25