【问题标题】:C programming issueC编程问题
【发布时间】:2015-04-08 05:21:43
【问题描述】:

我创建了一个简单的猜谜游戏。选择一个介于 0 到 100 之间的数字,根据您输入的数字,程序将输出 hot、Warm、Cold 或正确!。我选择作为正确答案的数字是 51。我的程序编译并运行,但始终输出正确!对于我输入的每个值。感谢您的帮助。

    int main(void)

{
    int number, answer;
    answer = 51;

    printf("Enter a number between 0 and 100:\n");
    scanf("%d", &number);

    if ((number > 51) && (number <= 56) || (number < 51) && (number >= 46))
    {
            printf("Hot\n");
    }     
    else if ((number > 56) && (number <= 66) || (number < 46) && (number >= 36))
    {
            printf("Warm\n");
    }
    else if ((number > 66) && (number <= 100) || (number <36) && (number >= 0))
    {
            printf("Cold\n");
    }
    else if ((number > 100) || (number < 0))
    {
            printf("Error number has to be between 0 and 100 - re run\n");
    } 
    else (number = 51);
    {
            printf("Correct!\n");
    } 
    system ("pause");
    return 0;    
}

【问题讨论】:

  • 你应该测试scanf的结果(扫描项目数)

标签: c if-statement


【解决方案1】:

这个小sn-p:

else (number = 51);
{
    printf("Correct!\n");
}

实际上等价于:

else
    (number = 51);
//=======================
{
    printf("Correct!\n");
}

其中的第一部分是else 子句,如果激活,它将把number 设置为51

第二部分与if 语句部分完全断开,它是一个独立块,无论如何都会执行。

如果您必须将条件放在那里以提高可读性(应该是== 而不是=),您可以这样做:

else // (number == 51)
{
    printf("Correct!\n");
}

顺便说一句,您可以通过从具体开始并转向一般来使代码更短且更具可读性,例如(只需替换 if 语句):

if (number == 51)
    printf ("Correct!\n");
else if ((number >= 46) && (number <= 56))
    printf ("Hot\n");
else if ((number >= 36) && (number <= 66))
    printf ("Warm\n");
else if ((number >= 0) && (number <= 100))
    printf ("Cold\n");
else
    printf ("Error,  number has to be between 0 and 100 - re run\n");
}

您无需检查“温度”的两个范围(上方和下方),因为内部范围已经检查过。

【讨论】:

    【解决方案2】:
    else (number = 51);
    {
       printf("Correct!\n");
    } 
    

    可以改写为

    else 
    {
       number = 51;
    }
    {
       printf("Correct!\n");
    } 
    

    所以不管你的号码是多少,printf("Correct!\n"); 都会被执行。

    可以这样修复

    else
    {
       printf("Correct!\n");
    } 
    

    【讨论】:

      【解决方案3】:

      从 else 语句中删除条件。

      int main(void)
      
      {
          int number, answer;
          answer = 51;
      
      printf("Enter a number between 0 and 100:\n");
      scanf("%d", &number);
      
      if ((number > 51) && (number <= 56) || (number < 51) && (number >= 46))
      {
              printf("Hot\n");
      }     
      else if ((number > 56) && (number <= 66) || (number < 46) && (number >= 36))
      {
              printf("Warm\n");
      }
      else if ((number > 66) && (number <= 100) || (number <36) && (number >= 0))
      {
              printf("Cold\n");
      }
      else if ((number > 100) || (number < 0))
      {
              printf("Error number has to be between 0 and 100 - re run\n");
      } 
      else
      {
              printf("Correct!\n");
      }
      return 0;    
      

      }

      【讨论】:

        【解决方案4】:

        您的代码说:如果没有满足任何 if 语句,则将 51 分配给数字。然后总是打印“正确!\n”。

        【讨论】:

          【解决方案5】:

          在最后一个 else 语句中,您应该使用 否则如果(数字 == 51) { ... } 或

          else 
          {
              ...
          }
          

          【讨论】:

            猜你喜欢
            • 2012-10-16
            • 1970-01-01
            • 2011-09-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-16
            • 2010-12-31
            • 2012-02-11
            相关资源
            最近更新 更多