c - 这段代码有错误吗?

标签 c

所以,我不认为我在这个问题上的逻辑有什么缺陷。

从左到右读取表达式,操作数为 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/

相关文章:

c++ - sizeof 运算符在运行时发生变化?

c - 如何通过串行读取在 Arduino LCD 上存储两条单独的线

c - 使用 OpenCV 时 GTK 应用程序不刷新 UI

比较两个文件的普通数和单个数

c - HPUX 上的 wcwidth 问题 : Internationalization and Localization Issue on HPUX

c++ - 在 Windows 和 C 上恢复文件

c++ - 未找到 libFLAC 符号和 vtable 错误

mysql - Ubuntu 上 C 和 MySql 中的访问拒绝错误

c - 如何使用 fscanf 读取文件中的数据

将 OpenOffice/Libreoffice 与代码文档的 Doxygen 结果结合起来?