![]() |
eXeL@B —› Оффтоп —› Помогите с С/C++! (важно) |
Посл.ответ | Сообщение |
|
Создано: 14 февраля 2008 20:39 · Поправил: 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 · Поправил: Player · Личное сообщение · #2 Ппроблема в том, что Вы не очищаете входной буфер после неправильного ввода. Когда scanf натыкается на символ не соответсвующий формату - чтение прекращается, и символы остаются во входном потоке. В результате прога зацикливается, читая одни и те же символы. В общем, после обнаружения неправильного ввода необходимо очищать входной поток: fflush(stdin) Но это не стандартный способ (не везде работает). Лучше читать строку, введенную пользователем, с помощью fgets, а потом разбирать её с помощью sscanf ![]() |
|
Создано: 14 февраля 2008 21:51 · Личное сообщение · #3 |
|
Создано: 14 февраля 2008 21:54 · Личное сообщение · #4 |
|
Создано: 14 февраля 2008 22:02 · Личное сообщение · #5 |
![]() |
eXeL@B —› Оффтоп —› Помогите с С/C++! (важно) |