Kochan编写的C语言编程第6章中的练习5
编写一个程序,作为一个简单的“打印”计算器。程序应该允许用户键入表单:
number operator的表达式。程序应该识别以下操作符:+、-、*、/、S。E
S操作符告诉程序将“累加器”设置为键入的数字。E操作符告诉程序执行到end.The,算术操作是在累加器的内容上执行的,其数字作为第二个操作数。
以下是显示程序应如何运行的“示例运行”:
开始计算10S集累加器至10 = 10.000000累加器2/除2= 5.000000累加器内容55 -减去55 -50.000000 100.25 S集累加器至100.25 = 100.250000 4*乘4= 401.000000 0 E程序结束= 401.000000计算结束。
确保程序检测到除法为零,并检查未知操作符。如果输入* 2,它将返回inf。我就是这样做的:
#include <stdio.h>
int main(void)
{
float number1, number2;
char operator;
do
{
printf("Enter your number with S sign that set it as your accumulator \n");
scanf("%f %c", &number1, &operator);
} while (operator != 'S');
do
{
printf("Enter your expression with the correct format\n");
scanf("%f %c", &number2, &operator);
if ( operator == '+' || operator == '-' || operator == '/' || operator == '*')
{
switch (operator)
{
case '+':
number1 = number1 + number2;
printf("=%.6f\n", number1);
break;
case '-':
number1 = number1 - number2;
printf("=%.6f\n", number1);
break;
case '*':
number1 = number1 * number2;
printf("=%.6f\n", number1);
break;
case '/':
if( number2 == 0)
printf("Division by Zero\n");
else
{
number1 = number1 / number2;
printf("%.6f\n", number1);
}
break;
default:
printf("not a valid operator\n");
break;
}
}
else
printf("Retry.\n");
} while (operator != 'E');
printf("End of Calculations\n");
return 0;
}发布于 2015-08-30 08:57:37
对于scanf("%f %c", &number2, &operator);语句,*不是%f的有效字符。扫描失败,但do块一次又一次尝试将*读入%f。
将语句替换为
if ( ( scanf("%f %c", &number2, &operator)) != 2) {
number2 = 1.0f;
operator = 0;
scanf ( "%*[^\n]");
}扫描将返回已成功读取的项目数。如果scanf不返回2,那么将值设置为适当的值,scanf ( "%*[^\n]);将读取和丢弃缓冲区中不是换行符的所有内容。
对number1的第一次扫描执行类似的操作
https://stackoverflow.com/questions/32294271
复制相似问题