我在 C 语言的签名数中遗漏了什么吗?
Is there anything that i missed in signed number in C language?
这是我的基本C测试程序。
在我构建它之后,我只是在控制台中输入负数,如 -1
、-2
等。
但是结果是"oh",不是"another number"。
我不知道为什么会这样,因为负数应该使 'if' 语句为真。
int main(int argc, char* argv[]){
long int num;
scanf("%d", &num);
if(num ==1 || num < 0){
printf("another number\n");
}else{
printf("oh\n");
}
}
对 long
个变量使用 %ld
,对 int
个变量使用 %d
。将您的代码更改为以下之一:
int num;
scanf("%d", &num);
或
long int num;
scanf("%ld", &num);
当您将%d
格式字符串与scanf 一起使用时,相应的参数将被视为int*
。但是你已经通过了long int*
。 scanf
存储的值将与您的 if
语句读取的大小不同。
形式上,您会得到未定义的行为。实际上,在大多数平台上 scanf
只会写入变量的一部分,其余部分将留有任意值,这通常会对以后的使用造成不良影响。
/tmp$ gcc -Wall foo.c
foo.c: In function ‘main’:
foo.c:4:5: warning: implicit declaration of function ‘scanf’ [-Wimplicit-function-declaration]
foo.c:4:5: warning: incompatible implicit declaration of built-in function ‘scanf’ [enabled by default]
foo.c:4:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘long int *’ [-Wformat]
foo.c:7:9: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
foo.c:7:9: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
foo.c:9:9: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
foo.c:11:1: warning: control reaches end of non-void function [-Wreturn-type]
修复这些警告的原因,所有错误都会消失。
这是我的基本C测试程序。
在我构建它之后,我只是在控制台中输入负数,如 -1
、-2
等。
但是结果是"oh",不是"another number"。
我不知道为什么会这样,因为负数应该使 'if' 语句为真。
int main(int argc, char* argv[]){
long int num;
scanf("%d", &num);
if(num ==1 || num < 0){
printf("another number\n");
}else{
printf("oh\n");
}
}
对 long
个变量使用 %ld
,对 int
个变量使用 %d
。将您的代码更改为以下之一:
int num;
scanf("%d", &num);
或
long int num;
scanf("%ld", &num);
当您将%d
格式字符串与scanf 一起使用时,相应的参数将被视为int*
。但是你已经通过了long int*
。 scanf
存储的值将与您的 if
语句读取的大小不同。
形式上,您会得到未定义的行为。实际上,在大多数平台上 scanf
只会写入变量的一部分,其余部分将留有任意值,这通常会对以后的使用造成不良影响。
/tmp$ gcc -Wall foo.c
foo.c: In function ‘main’:
foo.c:4:5: warning: implicit declaration of function ‘scanf’ [-Wimplicit-function-declaration]
foo.c:4:5: warning: incompatible implicit declaration of built-in function ‘scanf’ [enabled by default]
foo.c:4:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘long int *’ [-Wformat]
foo.c:7:9: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
foo.c:7:9: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
foo.c:9:9: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
foo.c:11:1: warning: control reaches end of non-void function [-Wreturn-type]
修复这些警告的原因,所有错误都会消失。