if-else语句

时间:2015-04-28 00:23:48

标签: c if-statement control-flow

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

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

例如:

  • 如果我输入55,它会说“OK”和“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");
}

3 个答案:

答案 0 :(得分:7)

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

  1. if (score >=80 && score <= 100)
  2. if (score >=55 && score <=79)
  3. if (score >=1 && score <=54) { ... } else { ... }
  4. 因此,如果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个解决方案:

  1. 制作if s&#34;独立&#34; (所以只有一个会通过)
  2. 添加一些else以确保只执行一个分支。
相关问题