C条件语句中不需要的输出

时间:2014-01-09 19:20:56

标签: c integer conditional-statements

我在课堂上有一个作业,我需要验证一些用户输入并根据所述输入输出不同的结果。非常基本的东西,但我是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代码将打印正确的字符串?

4 个答案:

答案 0 :(得分:4)

3 <= n < 23无法按照您在C中的方式工作。首先,将n3进行比较,然后转换为整数,如果为真,则生成10如果错误。然后将0(或1)与23进行比较,始终产生真(​​两者都小于23)。

将其改写为3 <= n && n < 23。同样适用于其他测试。

答案 1 :(得分:4)

3 <= n < 23

没有按照你的想法行事 它会做(3&lt; = n),它会评估某事(0或1个真值可能?)然后将其与23进行比较

你想要

3 <= n && n < 23

同样0 < n <= 3变为0 < n && n <= 3

答案 2 :(得分:1)

在C中,3 <= n < 23将评估为truefalse。它不是检查数字范围的条件(与Python不同)。改变

if (3 <= n < 23)  

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

else if (0 < n <= 3)  

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

答案 3 :(得分:0)

3&lt; = n&lt; 23与写入(3&lt; = n)&lt;相同。 23。如果为真,则第一部分返回1或者如果为假则返回0,将比较变为0 <0。 23或1&lt; 23因此总是回归真实。

为了达到你想要的效果,你必须写3&lt; = n&amp;&amp; n&lt; 23