我遇到了以下一段代码,我无法理解这scanf部分内容.
int main()
{
int i,j;
scanf("%d %d"+scanf("%d %d",&i,&j));
printf("%d %d",i,j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在输入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
有人可以解释工作吗?
它不是"工作",它是UB.
一种踩在薄冰上的变种.如果第一个scanf()返回2. 它将"工作" .但这对我来说看起来像黑客代码.
int main() {
int i,j;
scanf("%d %d"+scanf("%d %d",&i,&j), &i);
printf("%d %d",i,j);
return 0;
}
Run Code Online (Sandbox Code Playgroud)