这是我试图编译的代码
#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)
答案 0 :(得分:5)
答案 1 :(得分:1)
启用编译器的所有警告和调试信息,即使用gcc -Wall -g
。学习使用调试器(Linux上的gdb
)。你犯了两个错误:
首先,您对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); }
您的测试if (n >= 1 <= 10)
也是错误的。它应该是if (n>=1 && n<=10)
。请注意,对于n==20
,n>=1
测试为真,可以给出1(将true
布尔转换为整数),小于10;您的错误测试可能被解析为if((n>=1) <= 10)
,这与您的预期无关(因为当n
为20时该测试成功)。
BTW GCC 4.8,当gcc -Wall
被调用时,会发出两个警告,每个错误都有一个警告。一种好的工作方式是改进代码,直到编译器没有给出警告。然后使用调试器gdb
进行一些测试。