2015-09-06 69 views
-3
scanf("%d %d"+2, &a, &b); 
printf("%d\n%d", a, b); 

它接受仅a并打印a0
任何人都可以解释为什么会发生这种情况吗? 此外,如果我写+1而不是+2,它将不接受任何内容并打印00变化在scanf C语言

回答

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,该值将打印ab的值。