变化在scanf C语言
问题描述:
scanf("%d %d"+2, &a, &b);
printf("%d\n%d", a, b);
它接受仅a
并打印a
和0
。
任何人都可以解释为什么会发生这种情况吗? 此外,如果我写+1
而不是+2
,它将不接受任何内容并打印0
和0
。变化在scanf C语言
答
此:
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
和b
的值。