我只知道此链接中的%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);
}
%我工作正常,但%lld在变量a中存储垃圾值。
这是该程序的输出。
输入:033 033
输出:27 141733920846
进程返回0(0x0)执行时间:4.443秒 按任意键继续。
任何人都可以解释一下,为什么我在变量a中得到垃圾值?
答案 0 :(得分:5)
scanf
%i
需要int *
,但您传递的&b
是long long int *
。这有不明确的行为。
您应该使用%lli
。
printf
中出现同样的问题:使用%lli
打印b
,而不是%i
。
您还应该检查scanf
的返回值,以确保成功读取了两个值。
答案 1 :(得分:1)
首先,对%i
使用long long int
是未定义的行为,因此请改用%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
输出:
输入:输出:27 33 Retval:2
注意:请务必检查scanf的返回值。它返回扫描项目的数量,您应该根据您的期望进行测试。