0

这是我试图编译的代码

#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)

4

2 回答 2

5

修复你的scanf

scanf("%d", &n);

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

你应该使用

if (n <= 10  && n >= 1) {
//Your Code
}
于 2013-08-31T15:53:43.497 回答
1

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

  1. 首先,你的电话scanf是错误的

    scanf("%d, &n");
    

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

    • 首先也是最重要的,%d在其格式字符串中,scanf需要一个整数参数的地址,scanf("%d", &n);并且您有一些未定义的行为(您的程序经常会崩溃)。

    • 然后,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==20测试n>=1为真并且可以给出 1(true布尔值到整数的转换),它小于 10;您的错误测试可能会被解析为if((n>=1) <= 10)不符合您的预期(因为该测试在n20 时成功)。


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

于 2013-08-31T15:58:08.027 回答