带有 %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?