Ошибка при вводе дробного числа. - 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.