Я написал решение для упражнения, в котором предлагается написать программу, которая действует как простой «печатный» калькулятор, а также обнаруживает деление на ноль и проверяет неизвестные операторы.
Программа работает, как предполагалось, когда вводятся ожидаемые операторы. Например:
"100 S" печатает "= 100.000000"
"2 /" prints "= 50,000000"
"10 *" печатает "= 500.000000"
Также обнаруживает деление на ноль и неизвестные операторы.
Однако, когда я ввожу операторов в неправильном порядке, вот так:
«/ 2» или «* 10», программа застревает в цикле.
Как мне исправить эту ошибку, чтобы при вводе операторов в неправильном порядке выводился «Неизвестный оператор»?
// Write a program that acts as a simple "printing" calculator
#include <stdio.h>
int main (void)
{
float acc, b;
char operator;
printf ("Begin Calculations\n");
while ( operator != 'E') {
scanf ("%f %c", &b, &operator);
switch (operator)
{
case 'S': // set accumulator
case 's':
acc = b;
printf ("= %f\n", acc);
break;
case 'E': // end program
case 'e':
printf ("= %f\nEnd of Calculations.\n", acc);
break;
case '+':
printf ("= %f\n", acc += b);
break;
case '-':
printf ("= %f\n", acc -= b);
break;
case '*':
printf ("= %f\n", acc *= b);
break;
case '/':
if ( b == 0 )
printf ("Can't divide by zero.\n");
else
printf ("= %f\n", acc /= b);
break;
default:
printf ("Unknown operator.\n");
break;
}
}
return 0;
}
Обновление : Я нашел решение
while ( operator != 'E' && operator != 'e' ) {
if ( scanf ("%f %c", &b, &operator ) < 2 ) {
printf ("Error. You need to enter a number.\n");
break;
}
else {
switch (operator)...