【问题标题】:if-else statementif-else 语句
【发布时间】:2015-07-06 15:24:54
【问题描述】:

我的代码允许用户输入从 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");
}

【问题讨论】:

    标签: c if-statement control-flow


    【解决方案1】:

    发生这种情况是因为您使用多个控制流而不是使用一个控制流(因此,如果在最后一个 if 控制流(score &gt;= 55score &lt;= 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 语句,但上面的解决方案似乎不那么繁琐。

    【讨论】:

      【解决方案2】:

      每个if 语句都是一个独立的条件语句。您的示例包含三组条件语句:

      1. if (score &gt;=80 &amp;&amp; score &lt;= 100)
      2. if (score &gt;=55 &amp;&amp; score &lt;=79)
      3. if (score &gt;=1 &amp;&amp; score &lt;=54) { ... } else { ... }

      所以如果score 的值为55,它将与上面的#2 和#3 的else 匹配。

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

      例如

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

      【讨论】:

        【解决方案3】:

        您有 2 个 if-else 语句并且都被执行。因此,您将为他们俩做“某事”。使用score=55 浏览您的代码,您会发现问题所在。

        2 个解决方案:

        1. ifs 设为“独立”(因此只有一个会通过)
        2. 添加一些elses 以确保只有一个分支执行。

        【讨论】:

          猜你喜欢
          • 2019-04-09
          • 2017-02-05
          • 2012-08-05
          • 1970-01-01
          • 2021-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多