if-else 语句
if-else statement
我的代码允许用户输入从 1 到 100 的分数,这将告诉他们分数是 "Good"、"OK"、"Moron" 或 "Invalid".
但是,当我编译这些代码时。如果大于 54,则输出也无效,并使用正确的语句。
例如:
- 如果我输入 55,它会显示 "OK" AND "Invalid"。
- 如果我输入 54,它只会显示 "Moron"。
这是我的代码:
#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");
}
您有 2 个 if-else
语句并且都被执行了。所以你会为他们两个做 "something" 。使用 score=55
遍历您的代码,您会发现问题所在。
2 个解决方案:
- 将
if
设为"standalone"(这样只有一个会通过)
- 添加一些
else
以确保只有一个分支执行。
它之所以发生,是因为您没有使用一个控制流,而是使用了多个(因此,如果在最后一个 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");
}
你也可以使用嵌套的if
/else
语句,但上面的解决方案似乎没那么麻烦。
每个 if
语句都是一个独立的条件语句。您的示例包含三组条件语句:
if (score >=80 && score <= 100)
if (score >=55 && score <=79)
if (score >=1 && score <=54) { ... } else { ... }
因此,如果 score
的值为 55
,它将匹配上面的 #2 和 #3 的 else
。
此处的一种解决方案是将上述语句合并为一组。您可以使用 else if
执行此操作。
例如
if (*expr*) {
...
} else if (*expr*) {
...
} else if (*expr*) {
...
} else {
...
}
我的代码允许用户输入从 1 到 100 的分数,这将告诉他们分数是 "Good"、"OK"、"Moron" 或 "Invalid".
但是,当我编译这些代码时。如果大于 54,则输出也无效,并使用正确的语句。
例如:
- 如果我输入 55,它会显示 "OK" AND "Invalid"。
- 如果我输入 54,它只会显示 "Moron"。
这是我的代码:
#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");
}
您有 2 个 if-else
语句并且都被执行了。所以你会为他们两个做 "something" 。使用 score=55
遍历您的代码,您会发现问题所在。
2 个解决方案:
- 将
if
设为"standalone"(这样只有一个会通过) - 添加一些
else
以确保只有一个分支执行。
它之所以发生,是因为您没有使用一个控制流,而是使用了多个(因此,如果在最后一个 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");
}
你也可以使用嵌套的if
/else
语句,但上面的解决方案似乎没那么麻烦。
每个 if
语句都是一个独立的条件语句。您的示例包含三组条件语句:
if (score >=80 && score <= 100)
if (score >=55 && score <=79)
if (score >=1 && score <=54) { ... } else { ... }
因此,如果 score
的值为 55
,它将匹配上面的 #2 和 #3 的 else
。
此处的一种解决方案是将上述语句合并为一组。您可以使用 else if
执行此操作。
例如
if (*expr*) {
...
} else if (*expr*) {
...
} else if (*expr*) {
...
} else {
...
}