【发布时间】:2020-04-11 08:38:55
【问题描述】:
我使用的是 gcc 4.4.7。
当我在简单逻辑(C 语言)下运行时。
然后输入'1 2'。
int var1 = 0;
int var2 = 0;
if(!scanf("%ld %ld",&var1, &var2))
{
printf("--- ERROR\n");
}
else
{
printf("--- var1 [%ld] \n", var1);
printf("--- var2 [%ld] \n", var2);
}
结果: --- 变量1 [0] --- var2 [2]
我已经知道 %ld 适用于 long int。我真正想知道的是 scanf 的详细工作原理。 当我尝试扫描 2 个或更多数字时会发生这种情况。
【问题讨论】:
-
int不是long。将声明改为long int var1等 -
我已经知道如何解决这个问题了。我想知道为什么 var2 分配正确但 var1 没有。
-
这是因为您应该使用
%d格式来匹配int。另外,请不要检查来自scanf和!的返回值,而是预期的转化次数:if(scanf("%d %d", &var1, &var2) != 2) -
@WeatherVane 你能解释更多细节吗?如果只是不正确,则不应分配它们。但事实并非如此。
-
@HyunyoungGo 导致Undefined Behavior,请查看我的答案,我将 Weather Vane 和 Mark Ronson 的评论合并。
标签: c gcc scanf undefined-behavior