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.