【问题标题】:Undesired output in C conditional statement [duplicate]C条件语句中的不需要的输出[重复]
【发布时间】:2014-01-09 19:20:55
【问题描述】:

我在课堂上有一个作业,我需要验证一些用户输入并根据所述输入输出不同的结果。非常基本的东西,但我是 C 的新手,所以这就是我开始的地方。我以为我在正确的轨道上,但无论我输入什么整数,终端都会打印Good job! 这是我的代码:

C

printf("How tall should the pyramid be?\n");
int n = GetInt();
if (3 <= n < 23)
{
    printf("Good job!\n");
}
else if (0 < n <= 3)
{
    printf("Well, that's not very impressive is it?\n");
}
else
{
    printf("Please enter a valid number between 1 and 23.\n");
}

现在,我对 C 的经验为零,但我确实了解一些 Python,如果我要翻译上述代码,它会按预期工作:

Python

n = input("Enter Number")
if (3 <= n < 23):
    print("Good job!\n")
elif (0 < n <= 3):
    print("Well, that's not very impressive is it?\n")
else:
    print("Please enter a valid number between 1 and 23.\n")

为什么这种结构在 Python 而不是 C 中有效?我应该更改什么以便我的 C 代码打印正确的字符串?

【问题讨论】:

  • @JonathanLeffler 我可以看到你关于这成为一个常见问题的观点。为重复道歉,我的搜索太模糊了。
  • 很难找到那个...

标签: c integer conditional-statements


【解决方案1】:

3 &lt;= n &lt; 23 不像您在 C 中认为的那样工作。首先,n3 进行比较,然后转换为整数,如果为 true,则产生 1,如果为 false,则产生 0。然后将0(或1)与23 进行比较,总是得出真值(两者都小于23)。

将其重写为3 &lt;= n &amp;&amp; n &lt; 23。同样适用于其他测试。

【讨论】:

  • 啊!这就说得通了。三个答案都是一样的,但你先偷偷溜进去,所以等我的 10 分钟结束后,我会接受你的答案。谢谢!
【解决方案2】:
3 <= n < 23

没有做你认为它做的事情
它会做 (3

你想要的

3 <= n && n < 23

同样0 &lt; n &lt;= 3变成0 &lt; n &amp;&amp; n &lt;= 3

【讨论】:

    【解决方案3】:

    在 C 中,3 &lt;= n &lt; 23 将计算为 truefalse。它不是检查数字范围的条件(与 Python 不同)。改变

    if (3 <= n < 23)  
    

    if (3 <= n && n < 23)  
    

    else if (0 < n <= 3)  
    

    else if (0 < n && n <= 3)
    

    【讨论】:

      【解决方案4】:

      3

      为了实现你想要的,你必须写 3

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-12
        • 1970-01-01
        • 2016-08-05
        • 1970-01-01
        • 2016-11-20
        • 2012-11-08
        • 1970-01-01
        • 2011-12-20
        相关资源
        最近更新 更多