多个比较运算符?

时间:2016-11-11 18:10:29

标签: c comparison operators

我在使用C编写简单的FizzBu​​z时遇到多个操作符时遇到问题

#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;很明显,这个分配看起来应该是什么样的。

再次,谢谢!

2 个答案:

答案 0 :(得分:3)

重写此条件

if (0 < n < 10000){

if (0 < n && n < 10000){

否则原始条件看起来像

if (( 0 < n ) < 10000){

表达式0 < n的结果为10。实际上,您正在将0110000进行比较。

来自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}}将为零或一。)