对C中的scanf()感到困惑?

Ash*_*egi 0 c scanf

我在C中看到了这段代码并运行它:

int i,j;
scanf("%d %d"+scanf("%d %d",&i,&j));
printf("%d %d",i,j);
Run Code Online (Sandbox Code Playgroud)

输入:

1 2 3
Run Code Online (Sandbox Code Playgroud)

输出:

3 2
Run Code Online (Sandbox Code Playgroud)

这是非常意外的(逆序和三个输入).

请解释一下.

Joh*_*nck 6

这个:

scanf("%d %d"+scanf("%d %d",&i,&j));
Run Code Online (Sandbox Code Playgroud)

是可怕的代码!但是发生了什么?

首先,调用内部scanf.它存储1和2成i,并j分别(它应该是显而易见的,为什么这是).然后它返回2,因为这是它存储的东西的数量.然后"跳过"外部scanf格式语句的前两个字符,制作它" %d".然后scanf想要3从某个地方的输入存储,但是在外部scanf调用中没有给出指向变量的指针.接下来会发生什么?它是未定义的行为,但实际的事实是第二个(外部)scanf调用只是重用(或者,如果你愿意,可以踩踏)传递给第一个(内部)scanf的参数.所以存储了3 i,就是这样.