所以,我不认为我在这个问题上的逻辑有什么缺陷。
从左到右读取表达式,操作数为 float 。
但是,我的程序陷入了循环。它读取并分配最终的数字,例如,它将 10.5 分配给 num1,但它永远不会退出循环。
int main(void)
{
float num1, num2;
char oper = 0;
printf("Enter an expression: ");
scanf("%f", &num1);
while (oper != ('\n' || EOF))
{
oper = getchar();
scanf("%f", &num2);
switch (oper)
{
case '+':
num1 += num2;
break;
case '-':
num1 -= num2;
break;
case '*':
num1 *= num2;
break;
case '/':
num1 /= num2;
break;
}
}
printf("Value of Expression: %.2f", num1);
return 0;
}
预期输出:
Enter an expression: 1+2.5*3
Value of expression: 10.5
最佳答案
while (oper != ('\n' || EOF))
这里,('\n' || EOF) == 1
,所以循环除非您输入对应于 1 的 ASCII 字符(不可打印),否则不会终止。正如 Leffler 指出的那样,这应该是while (oper != '\n' && oper != EOF)
(尽管请参阅下一点)。在读取 while 循环中的
oper
之前,请检查它,因此 while 循环将在换行符/EOF“之后”终止一步。 while 循环实际上应该是:while(1) { oper = getchar(); if(oper == '\n' || oper == EOF) { break; // Exit out of loop, ignoring the rest of the code inside the loop. } scanf("%f", &num2); // ... }
getchar
返回一个int
,但oper
是一个char
。将oper
更改为int
(EOF
不能表示为char
)
关于c - 这段代码有错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977017/