为什么这个程序没有打印出想要的输出?
Why this program does not print the desired output?
我只是从这个 link
中了解到 %i 格式说明符
Difference between format specifiers %i and %d in printf
我尝试用这个程序实现它。
#include <stdio.h>
int main(){
long long a,b;
printf("Input: ");
scanf("%i %lld",&b,&a);
printf("Output: %i %lld",b,a);
}
%i 工作正常,但 %lld 在变量 a 中存储了一个垃圾值。
这是这个程序的输出。
Input : 033 033
Output : 27 141733920846
Process returned 0 (0x0) execution time : 4.443 s
Press any key to continue.
谁能解释一下,为什么我在变量 a 中得到垃圾值?
scanf
%i
需要一个 int *
,但你传递的是 &b
,这是一个 long long int *
。这有未定义的行为。
您应该使用 %lli
。
同样的问题出现在printf
:使用%lli
打印b
,而不是%i
。
您还应该检查 scanf
的 return 值以确保成功读取了两个值。
首先,对 long long int
使用 %i
是未定义的行为,因此请改用 %lli
。
同样的问题也存在于 printf 语句中。
固定码:
#include <stdio.h>
int main(){
long long a,b;
int retval;
printf("Input: \n");
retval = scanf("%lli %lld",&b,&a);
printf("Output: %lli %lld",b,a);
printf("\nRetval: %d",retval);
return 1;
}
输入:
033 033
输出:
Input: Output: 27 33 Retval: 2
注意:始终检查 scanf 的 return 值。它 return 是扫描项目的数量,您应该根据您的预期进行测试。
我只是从这个 link
中了解到 %i 格式说明符Difference between format specifiers %i and %d in printf
我尝试用这个程序实现它。
#include <stdio.h>
int main(){
long long a,b;
printf("Input: ");
scanf("%i %lld",&b,&a);
printf("Output: %i %lld",b,a);
}
%i 工作正常,但 %lld 在变量 a 中存储了一个垃圾值。
这是这个程序的输出。
Input : 033 033
Output : 27 141733920846
Process returned 0 (0x0) execution time : 4.443 s Press any key to continue.
谁能解释一下,为什么我在变量 a 中得到垃圾值?
scanf
%i
需要一个 int *
,但你传递的是 &b
,这是一个 long long int *
。这有未定义的行为。
您应该使用 %lli
。
同样的问题出现在printf
:使用%lli
打印b
,而不是%i
。
您还应该检查 scanf
的 return 值以确保成功读取了两个值。
首先,对 long long int
使用 %i
是未定义的行为,因此请改用 %lli
。
同样的问题也存在于 printf 语句中。
固定码:
#include <stdio.h>
int main(){
long long a,b;
int retval;
printf("Input: \n");
retval = scanf("%lli %lld",&b,&a);
printf("Output: %lli %lld",b,a);
printf("\nRetval: %d",retval);
return 1;
}
输入:
033 033
输出:
Input: Output: 27 33 Retval: 2
注意:始终检查 scanf 的 return 值。它 return 是扫描项目的数量,您应该根据您的预期进行测试。