printf()函数中的#是什么意思?c程序员

printf()函数中的#是什么意思?c程序员,c,printf,C,Printf,我正在读一个乘法表程序的源代码,我在他的所有打印十进制的printf函数中遇到了符号 我玩了源代码,看看它是否有什么不同,但在我看来一切都是一样的。#是什么意思?他为什么要在printf函数中使用它 printf ("%#2d |", i); 编辑:我想知道为什么这个家伙在不需要乘法表的情况下,会在printf()函数中使用# 每个人都从某处复制粘贴。不是我问题的答案。来自 与o、x或x说明符一起使用。对于不同于零的值,该值分别以0、0x或0x开头 与a、a、e、e、f、f、g或g一起使用时

我正在读一个乘法表程序的源代码,我在他的所有打印十进制的
printf
函数中遇到了
符号

我玩了源代码,看看它是否有什么不同,但在我看来一切都是一样的。#是什么意思?他为什么要在
printf
函数中使用它

printf ("%#2d |", i);
编辑:我想知道为什么这个家伙在不需要乘法表的情况下,会在
printf()
函数中使用
#

每个人都从某处复制粘贴。不是我问题的答案。

来自

与o、x或x说明符一起使用。对于不同于零的值,该值分别以0、0x或0x开头

与a、a、e、e、f、f、g或g一起使用时,它强制写入的输出包含小数点,即使后面没有更多的数字。默认情况下,如果后面没有数字,则不写入小数点


它没有说明使用
d
说明符会发生什么情况。

字符

#

说明

另一种形式。对于“g”和“g”,尾随的零不会被删除。对于“f”、“f”、“e”、“e”、“g”、“g”,输出总是包含一个小数点。对于“o”、“x”和“x”,分别将0、0x和0x前缀为非零数

资料来源:

编辑

要回答您的另一个问题:

编辑:我想知道这家伙为什么要使用#in printf()函数 当他不需要乘法表的时候

好问题。gcc发出警告:

警告:“#”标志与“%d”gnu_printf格式[-Wformat=]一起使用

你可能要问写剧本的人,因为我们不知道他们在写剧本的时候在想什么,我们也不能给你一个明确的答案,只是猜测。

似乎添加了转换前缀或后缀
以下是维基百科的一个例子:

printf("Color %s, number1 %d, number2 %05d, hex %#x, float %5.2f, unsigned value %u.\n", "red", 123456, 89, 255, 3.14159, 250); 
将打印以下行(包括新行字符,\n):

您也可以参考“man 3 printf”,以下是它的快照
#
该值应转换为“替代形式”。对于o转换,输出字符串的第一个字符变为零(如果它不是零,则在0前面加前缀)。对于x和x转换,非零结果前面有字符串“0x”(对于x转换为“0x”)。对于a、a、e、e、f、f、g和g转换,结果将始终包含一个小数点,即使后面没有数字(通常,仅当后面有数字时,这些转换的结果中才会显示小数点)。对于g和g转换,尾随零不会从结果中移除,否则会移除尾随零。对于其他转换,结果是未定义的。

这个问题可以通过显示研究来改进,例如printf的参考页,以查看他们对此的实际看法。然后回到这里,问一个具体的问题,如果有什么不清楚的地方。你最好阅读描述,然后发表评论。如果它用来打印六进制数,为什么这个家伙在乘法表的源代码中有它?我不知道。可能的原因:过去的
d
x
。特定的编译器有一些程序员利用的行为。格式是从另一个有用的地方复制和粘贴的,
。根据(“标志字符”部分),未定义
d
转换的结果。我的编译器没有给我任何警告。无论如何,谢谢。@user3621666是的,这取决于编译时使用的标志。我用:
gcc-std=c89-pedantic-Wall
编译了它。这样可以得到警告,而不仅仅是错误。我在vim中使用“make”命令,下次我以“cc-myprogram.c-myprogram”的方式编译它,所以它也会给我警告。@user3621666是的,您可以修改vim中的默认make命令来为您添加这些标志,所以您不必自己添加它们。非常有帮助。:)
Color red, number1 123456, number2 00089, hex 0xff, float  3.14, unsigned value 250.