Ошибка при вводе дробного числа. - C (СИ)
Формулировка задачи:
Подскажите, пожалуйста, как при вводе числа через scanf выводить ошибку при вводе дроби либо символа. Сделать нужно именно через printf / scanf в bcpp =(
#include <stdio.h> #include <conio.h> int roman(int,int,char); int main() { clrscr(); int a; short int b=1; printf("Перевод чисел из арабской в римскую.\n"); printf("\n"); printf("Введите число (Рабочий диапазон 1-3999 (I - MMMCMXCIX)):\n"); while(b) { scanf("%d",&a); if ((a>=1) && (a<=3999)) { b=0; a=roman(a,1000,'M'); a=roman(a,500,'D'); a=roman(a,100,'C'); a=roman(a,50,'L'); a=roman(a,10,'X'); a=roman(a,5,'V'); a=roman(a,1,'I'); getch(); return 0; } else { printf("Число выходит за границы диапазона\a"); } } return 0; } roman(int i,int j,char c) { while (i>=j) {putchar(c); i=i-j;} return(i); }
Решение задачи: «Ошибка при вводе дробного числа.»
textual
Листинг программы
int flag = 0; while (!flag) { printf("enter the number: "); fflush(stdout); retval = scanf("%d%c", &a, &c); if (retval == 2 && c == '\n') flag = 1; else printf("incorrect\n"); }
Объяснение кода листинга программы
- Объявлена переменная типа int
flag
и инициализирована значением 0. - Запущен цикл while, который будет выполняться до тех пор, пока значение переменной
flag
не станет равным 1. - В каждой итерации цикла выводится сообщение
enter the number:
и с помощью функции fflush(stdout) обеспечивается вывод этого сообщения без символа новой строки. - С помощью функции scanf() осуществляется попытка чтения числа. В качестве первого аргумента передается адрес переменной
a
, а вторым аргументом является символ 'c'. - Если функция scanf() успешно прочитала число и символ новой строки (т.е. значение переменной
c
равно '\n'), то значение переменнойflag
устанавливается равным 1 и цикл прерывается. - В противном случае выводится сообщение
incorrect
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д