c - printf 连续打印

标签 c printf

尝试另一个来自 KandR 的示例,我有以下 C 代码:

#include <stdio.h>

int main(){
  double nc = 5;

  printf("%*.0f",nc);

return 0;
}

这会打印 5,然后从左到右继续移动(打印空白字符),然后换行,直到按 Ctrl + C 停止)。当我将 printf 行更改为 printf("%.0f",nc) 它按预期工作,即它只打印 5 并停止。

根据 http://www.cplusplus.com/reference/cstdio/printf/ printf 的语法是:

%[flags][width][.precision][length] specifier.

我将 [width] 更改为 * 以便 printf 不会限制输出中的数字。

1) Why does it keep printing blank characters until stopped?

2) When I do not give any width, what does printf assume by default?

3) I also modified the above code to set nc = 500, then printf does not print anything except the continuous blank characters!

当我将它更改为 500.00 时,它会打印 500,之后它会一直打印空白字符,直到停止。为什么设置nc=500没有输出,为什么设置nc=500.00有输出?

最佳答案

格式说明符 "%*.0f" 需要两个参数:一个是宽度说明符,另一个是 double 说明符。因为你只传递一个,它调用 undefined behaviour

如果你更正它,例如:

  printf("%*.0f",5, nc); // width 5

它会很好地工作。

关于c - printf 连续打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24223130/

相关文章:

c - 传递给 main() 的参数名称是否重要

c - 是否要避免连续调用 `errno`?

C:如果我们不知道长度,如何使用 fgets() 填充表格?

perl - 如何在 Perl printf 表达式中包含变量?

c - 如何使用 printf() 格式化字符串以在输出中获得相等的长度

c - null 和 NULL ,有什么区别吗?

c - 从线程更新全局变量

C - 第三次 scanf 修改第二次 scanf 中的变量

c++ - ? : operator on sprintf

c - 数组C编程中打印出奇怪的字母