if-else 语句

if-else statement

我的代码允许用户输入从 1 到 100 的分数,这将告诉他们分数是 "Good"、"OK"、"Moron" 或 "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");
}

您有 2 个 if-else 语句并且都被执行了。所以你会为他们两个做 "something" 。使用 score=55 遍历您的代码,您会发现问题所在。

2 个解决方案:

  1. if设为"standalone"(这样只有一个会通过)
  2. 添加一些 else 以确保只有一个分支执行。

它之所以发生,是因为您没有使用一个控制流,而是使用了多个(因此,如果在最后一个 if 控制流(score >= 55score <= 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 语句都是一个独立的条件语句。您的示例包含三组条件语句:

  1. if (score >=80 && score <= 100)
  2. if (score >=55 && score <=79)
  3. if (score >=1 && score <=54) { ... } else { ... }

因此,如果 score 的值为 55,它将匹配上面的 #2 和 #3 的 else

此处的一种解决方案是将上述语句合并为一组。您可以使用 else if 执行此操作。

例如

if (*expr*) {
    ...
} else if (*expr*) {
    ...
} else if (*expr*) {
    ...
} else {
    ...
}