C语言中scanf的变化

时间:2015-09-06 10:01:50

标签: c scanf

scanf("%d %d"+2, &a, &b);
printf("%d\n%d", a, b);

仅接受a并打印a0 任何人都可以解释为什么会这样吗? 另外,如果我写+1而不是+2,则它不接受任何内容并打印00

1 个答案:

答案 0 :(得分:3)

此:

scanf("%d %d"+2,&a,&b);

相同
scanf(" %d", &a, &b);

相同
scanf("%d", &a, &b);

这意味着额外的&b参数是不必要的。

这里发生的事情是"%d %d"char*。向它添加两个会导致指向前两个字节的指针,这意味着它现在指向" %d"。前导空格是不必要的,因为%d已经跳过前导空白字符。

当您使用+1代替+2时,scanf

相同
scanf("d %d", &a, &b);

这意味着它希望输入中的d后跟一个整数分配给a。由于您在输入中提供了一个数字而不是d,因此scanf失败并返回0.因此,没有任何内容被接受,执行到达printf,它会打印两个a的值1}}和b