关于C语法的问题
我有一个朋友正在编写一本书中的一个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 >
#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");
}