与c中的scanf语句相关

时间:2017-04-11 20:17:50

标签: c scanf

我遇到了以下代码,但我无法理解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.

有人可以解释一下工作吗?

1 个答案:

答案 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;
}