基础知识 | 每日一面(78)

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:我的程序的屏幕提示和中间输出有时显示在屏幕上, 尤其是当我用管道向另一个程序输出的时候。

小林:在输出需要显示的时候最好使用明确的 fflush(stdout) 调用, 尤其是当显示的文本没有 \n 结束符时。有几种机制会努力帮助你在 “适当的时机” 执行 fflush, 但这仅限于 stdout 为交互终端的时候。

读者:我如何在 printf 的格式串中输出一个 ’%’?我试过 \%, 但是不

行。

小林:只需要重复百分号: %%。\%不行, 因为反斜杠 \ 是编译器的转义字符, 而这里我们的问题最终是 printf的转义字符。

读者:有人告诉我在 printf 中使用 %lf 不正确。那么, 如果 scanf() 需要%lf, 怎么可以用在 printf() 中用 %f 输出双精度数呢?

小林:printf 的 %f 标识符的确既可以输出浮点数又可以输出双精度数。根据 “缺省参数扩展” 规则, 不论范围内有没有原形都会在在类似 printf 的可变长度参数列表中采用, 浮点型的变量或扩展为双精度型, 因此 printf() 只会看到双精度数。printf() 的确接受 %Lf, 用于输出长双精度数。

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

正文完