繁体   English   中英

C语言中scanf的变体

[英]variations in scanf in C language

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

它只接受a并打印a0
谁能解释为什么会这样? 另外,如果我写+1而不是+2 ,它不接受任何内容并打印00

这个:

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

是相同的

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

这与

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

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

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


当您使用+1而不是+2scanf

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

这意味着它期望输入中的d后跟一个整数分配给a 由于您在输入中提供了一个数字而不是d ,因此scanf失败并返回 0。因此,没有任何东西被接受并且执行到达printf ,它打印了ab的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM