我遇到了以下代码,但我无法理解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.
有人可以解释一下工作吗?
答案 0 :(得分:5)
内部scanf("%d %d",&i,&j)
返回一个计数,例如2,1,EOF(或者可能是0)。
将该计数添加到格式字符串"%d %d"
,将计数格式(例如2)抵消,以形成" %d"
。这只是指针添加。 @John Bollinger
然后代码执行相当于scanf(" %d");
的未定义行为(UB),因为它缺少与int *
匹配的" %d"
。 @mch
有人可以解释一下工作吗?
它不是“有效”,而是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;
}