这个C代码有什么问题?

时间:2013-08-31 15:52:46

标签: c output

这是我试图编译的代码

#include <stdio.h>

int main(void)
{
   int n;
   printf("Enter the value for the nuber to be tested\n");
   scanf("%d", &n);
   if(n <=10 && >= 1)
       printf("n is between 1 to 10\n");
   return 0;
}

因此,当我编译它时,它会在行if(n <=10 && >= 1)

处显示错误

2 个答案:

答案 0 :(得分:5)

修正您的scanf

scanf("%d", &n);

并检查n是否在[1,10]范围内

您应该使用

if (n <= 10  && n >= 1) {
//Your Code
}

答案 1 :(得分:1)

启用编译器的所有警告和调试信息,即使用gcc -Wall -g。学习使用调试器(Linux上的gdb)。你犯了两个错误:

  1. 首先,您对scanf的来电是错误的

    scanf("%d, &n");
    

    这是双重错误,GCC会警告你。

    • 首先也是最重要的是,如果格式字符串中包含%d,则scanf需要一个整数参数的地址,例如scanf("%d", &n);,并且您有一些undefined behavior(你的程序经常崩溃)。

    • 然后,scanf可能会失败。检查其结果(成功扫描的项目数):

      if (scanf("%d", &n) <= 0)
        { fprintf(stderr, "failure to read a number\n");
          exit(EXIT_FAILURE); }
      
  2. 您的测试if (n >= 1 <= 10)也是错误的。它应该是if (n>=1 && n<=10)。请注意,对于n==20n>=1测试为真,可以给出1(将true布尔转换为整数),小于10;您的错误测试可能被解析为if((n>=1) <= 10),这与您的预期无关(因为当n为20时该测试成功)。


  3. BTW GCC 4.8,当gcc -Wall被调用时,会发出两个警告,每个错误都有一个警告。一种好的工作方式是改进代码,直到编译器没有给出警告。然后使用调试器gdb进行一些测试。