The*_*WL2 3 c if-statement control-flow
我的代码允许用户输入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");
}
Run Code Online (Sandbox Code Playgroud)
之所以发生这种情况,是因为您不使用一个控制流而是使用多个(因此,如果在最后一个if
控制流(score >= 55
直通score <= 100
)之前满足条件,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");
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用嵌套if
/ else
语句,但上面的解决方案似乎不那么麻烦.
小智 7
每个if
语句都是一个独立的条件语句.您的示例有三组条件语句:
if (score >=80 && score <= 100)
if (score >=55 && score <=79)
if (score >=1 && score <=54) { ... } else { ... }
因此,如果score
有值55
,它将匹配上面的#2和else
#3的#2.
这里的一个解决方案是将上述语句组合成一个组.你可以这样做else if
.
例如
if (*expr*) {
...
} else if (*expr*) {
...
} else if (*expr*) {
...
} else {
...
}
Run Code Online (Sandbox Code Playgroud)