关于C语法的问题

关于C语法的问题,c,C,我有一个朋友正在编写一本书中的一个c示例,他编写了如下代码 #include<stdio.h> #include<math.h> #pragma warning(disable:4996) int main() { float numGrade; printf("\n\nPlease enter your numerical grade: "); scanf("%f", &numGrade); if (numGrade >

我有一个朋友正在编写一本书中的一个c示例,他编写了如下代码

#include<stdio.h>
#include<math.h>
#pragma warning(disable:4996)

int main()
{
    float numGrade;

    printf("\n\nPlease enter your numerical grade: ");
    scanf("%f", &numGrade);

    if (numGrade >= 90)
        printf("\nYou got an A.\n\n");
    else if (90 > numGrade >= 80)
        printf("\nYou got a B.\n\n");
    else if (80 > numGrade >= 70)
        printf("\nYou got a C.\n\n");
    else if (70 > numGrade >= 60)
        printf("\nYou got a D.\n\n");
    else if (60 > numGrade)
        printf("\nYou got an F.\n\n");
    else
        printf("\nThis is an invalid grade!\n");
}

第一个例子根本不起作用

每个测试中的第一次比较将返回0或1。所以第二次总是失败

编辑:


但是,该程序可能仍会按预期方式“运行”,原因很简单,因为不需要在每个测试中进行第二次比较。

当您编译并运行它时,它是否按预期方式运行?(提示:不会)您是否在询问是否可以删除
#include
?@Marlon:很难注意到,但问题显然是关于第一个示例中的
90>numGrade>=80
条件。在第二个示例中假设包含。下次请格式化代码时,需要30秒,人们会更愿意提供帮助。还要注意,从逻辑上讲,您不需要两种比较。例如,想象比较<80然后<90;如果第二个比较是真的,那么值是>=80和<90。这就是我想知道的。事实上,对于输入的许多数字,它都工作正常,除了66个数字出错。他更改了它,但我想确认它是错误的谢谢你的快速回复我还没有运行它,但我不认为第一个示例会给出除a、F或无效之外的分数?如果不清楚,比较运算符不会以你可能认为的方式链接
x
并不意味着
x
;它表示
(x
,其中
(x
产生0或1。事实上,您需要显式地编写
&&
,这并不糟糕。棘手的部分是,
x
是完全有效的代码——它的含义与数学符号中的典型含义非常不同。
int main()
{
    float numGrade;

    printf("\n\nPlease enter your numerical grade: ");
    scanf("%f", &numGrade);

    if (numGrade >= 90)
        printf("\nYou got an A.\n\n");
    else if (90 > numGrade && numGrade >= 80)
        printf("\nYou got a B.\n\n");
    else if (80 > numGrade && numGrade >= 70)
        printf("\nYou got a C.\n\n");
    else if (70 > numGrade && numGrade >= 60)
        printf("\nYou got a D.\n\n");
    else if (60 > numGrade)
        printf("\nYou got an F.\n\n");
    else
        printf("\nThis is an invalid grade!\n");
}