我在课堂上有一个作业,我需要验证一些用户输入并根据所述输入输出不同的结果。非常基本的东西,但我是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代码将打印正确的字符串?
答案 0 :(得分:4)
3 <= n < 23
无法按照您在C中的方式工作。首先,将n
与3
进行比较,然后转换为整数,如果为真,则生成1
或0
如果错误。然后将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
将评估为true
或false
。它不是检查数字范围的条件(与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