我在使用C编写简单的FizzBuz时遇到多个操作符时遇到问题
#include <stdio.h>
int main(void) {
int n;
scanf("%d", &n);
if (0 < n < 10000){
for (int i = 1; i <= n; i ++) {
if (i % 15 == 0) {
puts("TikTak");
}
else if (i % 3 == 0) {
puts("Tik");
}
else if (i % 5 == 0) {
puts("Tak");
}
else {
printf("%d\n", i);
}
}
}else{
printf("-1");
}
}
现在&#34; if(0&lt; n&lt; 10000)&#34;比较运算符由于某种原因被忽略,但如果我将其重写为:
if (n < 10000 && n > 0){
它将按预期工作。
我错过了什么吗?老实说我是C编程的新手。哈哈
编辑:谢谢大家,哈哈非常简单。我认为这可能是我刚刚确定的问题,因为&#34; 0&lt; n&lt; 10000&#34;很明显,这个分配看起来应该是什么样的。
再次,谢谢!
答案 0 :(得分:3)
重写此条件
if (0 < n < 10000){
像
if (0 < n && n < 10000){
否则原始条件看起来像
if (( 0 < n ) < 10000){
表达式0 < n
的结果为1
或0
。实际上,您正在将0
或1
与10000
进行比较。
来自C标准(6.5.8关系运算符)
6每个运营商&lt; (小于),&gt; (大于),&lt; =(小于 或者等于),并且&gt; =(大于或等于)如果是,则产生1 指定的关系为true,如果为false,则为0 .107)结果为 输入int。
答案 1 :(得分:1)
表达式0 < n < 10000
相当于(0 < n) < 10000
,这意味着您检查0 < n
是否小于10000
,它将永远是(0 < n
的比较结果{ {1}}将为零或一。)