我遇到了以下代码,但我无法理解 scanf
部分。
int main()
{
int i,j;
scanf("%d %d"+scanf("%d %d",&i,&j));
printf("%d %d",i,j);
return 0;
}
我在输入 4 8 9 上运行代码,它返回 9 8。
有人可以解释一下工作原理吗?
最佳答案
内部 scanf("%d %d",&i,&j)
返回一个计数,例如 2,1、EOF(或者可能是 0)。
将该计数添加到格式字符串“%d %d”
,将格式偏移该计数(例如 2),以形成“%d”
。这只是指针加法。 @John Bollinger
然后代码执行相当于 scanf("%d");
的操作,这是未定义的行为 (UB),因为它缺少匹配的 int *
来配合“%d”
。 @mch
Can someone please explain the working?
它不是“工作”,它是 UB。
踩在 thin ice 上的变体。如果第一个 scanf()
返回 2,它将“工作”。然而,这对我来说看起来像是黑客代码。
int main() {
int i,j;
scanf("%d %d"+scanf("%d %d",&i,&j), &i);
printf("%d %d",i,j);
return 0;
}
关于c - 与c中的scanf语句相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355450/