4

printf功能而言,我从一些参考资料和实验中了解到以下内容。

  • 当我们尝试使用用于 float(或)double 的格式说明符打印整数值时,反之亦然,行为是不可预测的。
  • 但是可以%c用来打印整数值的等效字符。也可以使用 of%d打印字符的 ASCII 值(整数表示)。

scanf同样,如果格式说明符和传递给 scanf 的参数不匹配,则 的行为是什么。标准有定义吗?

4

1 回答 1

4

可变参数(与省略号匹配的参数...)是默认提升的。这意味着所有较短的整数类型都被提升为int(或无符号,视情况而定)。整数和字符之间没有区别(我相信)。%d%cin之间的区别printf仅仅是值的格式

scanf是一壶不同的鱼。您传递的所有参数都是指针。指针之间没有默认提升,传递与指针类型匹配的确切格式说明符至关重要。

在任何一种情况下,如果您的格式说明符与提供的参数不匹配(例如将 an 传递int *给 a %pin printf),则结果是undefined behavior,这比“不可预测”要糟糕得多——这意味着您的程序只是格式错误.

于 2012-10-10T23:40:53.500 回答