![]() |

 |
|
Домой |
Статьи |
RAR-cтатьи |
Форум |
Программирование |
Скачать |
DVD-ROM
|
|
|
|
Новичку |
FAQ |
Ссылки |
Интервью |
Архив |
Новости |
Связь |
|
Сейчас на форуме: RaMMicHaeL, Ara, gudvin2, gorelkin (+7 невидимых пользователей) |
 |
|
| Посл.ответ |
Сообщение |
|
Создано: 14 февраля 2008 20:39:03 · Поправил: Oott Личное сообщение #1
Вобщем такая задача, сделать ввод целого числа через scanf и что бы пользователь не вбил, должен быть вразумительный ответ от программы. Толи из-за глюченого компиля, толи еще из-за чего у меня не выходит сделать, чтобы прога не валилась при вводе букв!
Вот мой код:
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<math.h>
void main()
{
int pr;
double m;
while(1)
{clrscr();
pr=0;
printf("Vvedite celie chisla m:\n");
scanf("%lf",&m);
if(int(m)==0)
{ printf("Error_(m):Vi vveli ne chislennii simvol, vvedite chislo!\n"); pr=1;}
if(m!=int(m))
{ printf("Error_(m):Vi vveli ne celoe chislo, vvedite celoe!\n"); pr=1;}
if(pr==0)
{break;}
getch(); }
printf("chislo %d",int(m));
getch();
}
Пожалуйсто помогите, очень нужно!
|
|
|
Создано: 14 февраля 2008 21:34:53 · Поправил: Player Личное сообщение #2
Ппроблема в том, что Вы не очищаете входной буфер после неправильного ввода.
Когда scanf натыкается на символ не соответсвующий формату - чтение прекращается, и символы остаются во входном потоке.
В результате прога зацикливается, читая одни и те же символы.
В общем, после обнаружения неправильного ввода необходимо очищать входной поток:
fflush(stdin)
Но это не стандартный способ (не везде работает).
Лучше читать строку, введенную пользователем, с помощью fgets, а потом разбирать её с помощью sscanf
|
|
Создано: 14 февраля 2008 21:51:33 Личное сообщение #3
Большое спасибо за разьяснение ошибки. Ну вот только число после ввода буквы будет всегда равно нулю и как теперь отличит его программе от реального нуля?
|
|
Создано: 14 февраля 2008 21:54:50 Личное сообщение #4
Надо анализировать возвращаемое значение scanf.
Оно равно числу успешно распознанных полей.
Например:
if(scanf("%lf",&m) != 1)
// Здесь scanf не смог преобразовать ввод пользователя
|
|
Создано: 14 февраля 2008 22:02:48 Личное сообщение #5
Еще раз большое спасибо, реально помог!
|
 |
|
У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0
|
| Вы находитесь на форуме сайта CRACKLAB.RU |
|