带有 %ld %ld 的 scanf 整数不能正常工作
scanf integer with %ld %ld is not work correctly
我正在使用 gcc 4.4.7。
当我运行下面的简单逻辑(C lang).
然后输入'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 个或更多数字时会发生这种情况。
格式说明符 %ld
用于 long int
(%lld
用于 long long int
)。
int
应与 %d
格式说明符匹配。使用 不 与变量类型一致的格式说明符会导致 未定义的行为。
不要使用 !
运算符检查来自 scanf 的 return 值,而是使用预期的转换次数,如下所示:
if(scanf("%d %d", &var1, &var2) != 2)
printf("--- ERROR\n");
进一步阅读
What happens when I use the wrong format specifier?
我正在使用 gcc 4.4.7。
当我运行下面的简单逻辑(C lang).
然后输入'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 个或更多数字时会发生这种情况。
格式说明符 %ld
用于 long int
(%lld
用于 long long int
)。
int
应与 %d
格式说明符匹配。使用 不 与变量类型一致的格式说明符会导致 未定义的行为。
不要使用 !
运算符检查来自 scanf 的 return 值,而是使用预期的转换次数,如下所示:
if(scanf("%d %d", &var1, &var2) != 2)
printf("--- ERROR\n");
进一步阅读
What happens when I use the wrong format specifier?