[英]Why this program does not print the desired output?
我只是从此链接了解%i格式说明符
我试图用这个程序来实现它。
#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中。
这是该程序的输出。
输入:033033
输出:27 141733920846
进程返回0(0x0)执行时间:4.443 s按任意键继续。
谁能解释,为什么我在变量a中得到垃圾值?
scanf
%i
需要一个int *
,但是您要传递&b
,这是一个long long int *
。 这具有未定义的行为。
您应该使用%lli
。
在printf
会发生相同的问题:使用%lli
打印b
而不是%i
。
您还应该检查scanf
的返回值,以确保成功读取了两个值。
首先,将%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刷新:2
注意:始终检查scanf的返回值。 它返回已扫描项目的数量,您应该根据自己的期望进行测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.