与c中的scanf语句相关

har*_*han 2 c scanf

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

有人可以解释工作吗?

chu*_*ica 5

内部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)

  • @harshvardhan,它是加法运算符.在这种情况下,涉及的操作是指针+整数风格.这就是chux说"将该计数添加到格式字符串[...]"的原因. (2认同)