Выход из калькулятора при неверном вводе данных - C (СИ)
Формулировка задачи:
Товарищи, подскажите пожалуйста. В задаче требуется выйти из приведённого ниже калькулятора путём ввода не числа в ответ на приглашение ввода:
Нужно какое-то условие для переменной a, но я никак не могу придумать такое
#include <stdio.h>
void main() {
int a, b;
char op;
while(1) {
scanf("%d%c%d", &a, &op, &b);
if(b == 0 && op == '/'){
printf("=INF\n");
continue;
}
switch(op) {
case '+': printf("=%d\n", a+b); break;
case '-': printf("=%d\n", a-b); break;
case '*': printf("=%d\n", a*b); break;
case '/': printf("=%d\n", a/b); break;
case '%': printf("=%d\n", a%b); break;
default: printf("\nWrong operation!!!\n"); break;
}
}
}Решение задачи: «Выход из калькулятора при неверном вводе данных»
textual
Листинг программы
//--------------------------------------------------------------------------
// Функция: ReadValue
// Описание: получение и проверка данных с консоли
//--------------------------------------------------------------------------
double ReadValue()
{
double temp=NO;
int val;
do
{
val=getch();
if (val>=48&&val<=57) // от 0 до 9
{
if(temp==NO) temp=0;
temp=temp*10+(val-'0');
printf("%c",val);
}
else
break;
}while(val!=ESC&&val!=ENTER); // пока не нажата или ENTER или ESC
if (val==ESC)
return END_POINT;
if (val!=ESC&&val!=ENTER)
return NO;
} // end ReadValue
Объяснение кода листинга программы
- Функция ReadValue предназначена для получения и проверки данных, вводимых пользователем.
- В начале функции объявлены две переменные: temp типа double и val типа int. Значение переменной temp установлено в NO, а переменная val инициализируется значением, полученным с помощью функции getch().
- Далее следует цикл do-while, который выполняется до тех пор, пока пользователь не введет ENTER или ESC.
- Внутри цикла происходит проверка введенного значения. Если оно является числом от 0 до 9, то значение переменной temp умножается на 10 и к нему добавляется значение val, извлеченное из строки, используя таблицу символов ASCII.
- Если введено нечисловое значение, то цикл прерывается.
- Если пользователь нажимает ESC, функция возвращает END_POINT.
- Если пользователь вводит что-то, что не является ESC или ENTER, функция возвращает NO.