if-else语句

The*_*WL2 3 c if-statement control-flow

我的代码允许用户输入1到100的分数,这将告诉他们分数是"好","好","莫伦"或"无效".

但是,当我编译这些代码时.如果输出超过54,则输出也是无效的.

例如 :

  • 如果我输入55,它会说"OK"和"Invalid".
  • 如果我进入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)

pot*_*hin 7

之所以发生这种情况,是因为您不使用一个控制流而是使用多个(因此,如果在最后一个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语句都是一个独立的条件语句.您的示例有三组条件语句:

  1. if (score >=80 && score <= 100)
  2. if (score >=55 && score <=79)
  3. 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)