scanf("%d %d"+2, &a, &b);
printf("%d\n%d", a, b);
仅接受a
并打印a
和0
任何人都可以解释为什么会这样吗?
另外,如果我写+1
而不是+2
,则它不接受任何内容并打印0
和0
。
答案 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
。