我的代码允许用户输入1到100分,这将告诉他们分数是“好”,“好”,“莫伦”或“无效”。
但是,当我编译这些代码时。如果输出超过54,则输出也是无效的。
例如:
以下是我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void main()
{
int score;
printf("Enter a Score");
scanf("%d", &score);
if (score >=80 && score <= 100){
printf("Good\n",);
}
if (score >=55 && score <=79){
printf("OK\n",);
}
if (score >=1 && score <=54){
printf("Moron\n",);
}
else{
printf("Invalid\n");
}
system("pause");
}
答案 0 :(得分:7)
这种情况正在发生,因为您不使用一个控制流而是使用多个(因此,如果在最后if
控制流(score >= 55
到score <= 100
之前满足条件),{{1}来自最后一个的代码也被执行)。您可以使用else
分支机构:
else if
您也可以使用嵌套的if (score >= 80 && score <= 100){
printf("Good\n",);
} else if (score >= 55 && score <= 79){
printf("OK\n",);
} else if (score >= 1 && score <= 54){
printf("Moron\n",);
} else {
printf("Invalid\n");
}
/ if
语句,但上述解决方案似乎不那么繁琐。
答案 1 :(得分:7)
每个if
语句都是一个独立的条件语句。您的示例有三组条件语句:
if (score >=80 && score <= 100)
if (score >=55 && score <=79)
if (score >=1 && score <=54) { ... } else { ... }
因此,如果score
的值为55
,则会与上面的#2和#3的else
匹配。
这里的一个解决方案是将上述陈述合并为一个组。您可以使用else if
执行此操作。
e.g。
if (*expr*) {
...
} else if (*expr*) {
...
} else if (*expr*) {
...
} else {
...
}
答案 2 :(得分:3)
你有两个if-else
语句,都会被执行。所以你会做一些事情&#34;对于他们两个。使用score=55
浏览您的代码,您就会发现问题。
2个解决方案:
if
s&#34;独立&#34; (所以只有一个会通过)else
以确保只执行一个分支。