格式化输出在C语言中非常常用,提供了多种用法来控制输出的格式。下面是一些常见的格式化输出用法:
基础
-
整数输出:
-
"%d":以十进制整数形式输出。
-
"%x":以十六进制整数形式输出(小写字母)。
-
"%X":以十六进制整数形式输出(大写字母)。
-
"%o":以八进制整数形式输出。
-
-
浮点数输出:
-
"%f":以十进制浮点数形式输出。
-
"%e":以指数形式(科学计数法)输出。
-
"%g":以十进制或指数形式输出,根据数值大小自动选择合适的表示方式。
-
-
字符和字符串输出:
-
"%c":输出一个字符。
-
"%s":输出一个字符串。
-
-
宽度和精度控制:
-
"%Nd":指定输出的整数最小宽度为N,不足N位的整数会在前面用空格填充,负号计入总宽度。
-
"%N.mf":指定输出的浮点数最小宽度为N,保留m位小数。不足N位的浮点数会在前面用空格填充,小数位数不足m位的会进行四舍五入,负号和小数点计入总宽度。
-
"%-Nd":指定输出的整数最小宽度为N,并左对齐输出。
-
"%0Nd":指定输出的整数最小宽度为N,不足N位的在前面用零进行填充。
-
进阶
当涉及到格式化输出时,C语言提供了丰富的选项来控制输出的样式。以下是一些进一步的格式化输出选项:
-
对齐方式:
-
"%-Nd":指定整数最小宽度为N,并左对齐输出。
-
"%Nd":指定整数最小宽度为N,并右对齐输出(默认方式)。
-
-
正负号的显示:
-
"%+d":显示正数的正号,负数的负号。
-
"% d":正数前面加空格,负数前面加负号。
-
"%d":正数不显示符号,负数显示负号(默认方式)。
-
-
填充字符:
-
"%0Nd":指定整数最小宽度为N,并在前面用零进行填充。
-
"%Nd":指定整数最小宽度为N,默认使用空格进行填充(默认方式)。
-
-
宽度和精度控制:
-
"%*d":使用一个额外的整数参数来动态指定宽度。
-
"%.*f":使用一个额外的整数参数动态指定小数位数的精度。
-
#include <stdio.h> int main() { int width = 5; int num = 42; double PI = 3.1415926545; printf("%.*lf\r\n",width,PI);//以width动态的指定输出的保留小数的长度 printf("%0*d\n", width, num);//以width动态的指定输出的d的长度 return 0; }
-
-
-
字符串输出的限制:
-
"%.Ns":表示将字符串限制为恰好N个字符的输出。如果字符串的长度超过5个字符,那么只会输出前N个字符,截断后面的字符。如果字符串的长度不足N个字符,输出将包含所有可用字符,但不会进行填充。
-
"
%Ns
":表示将字符串限制为最多N个字符的输出。如果字符串的长度超过N个字符,那么只会输出前N个字符,不会截断字符串。如果字符串的长度不足N个字符,输出将包含空格填充以达到N个字符的宽度。
-
-
强制输出符号和基数:
-
"%#x":以十六进制形式输出,并在前面加上"0x"前缀。
-
"%#o":以八进制形式输出,并在前面加上"0"前缀。
-
"%#f":以十进制浮点数形式输出,并始终包含小数点。
-
-
指定输入
-
%[..] :允许指定一个字符集或字符范围,以便匹配特定类型的输入
常见用法:
扫描字符集:%[abc]
表示匹配字符集中的任何一个字符。例如,%[abc]
将匹配字符'a'、'b'或'c'。
排除字符集:%[^abc]
表示排除字符集中的任何一个字符。例如,%[^abc]
将匹配除了字符'a'、'b'和'c'之外的任何字符。
字符范围:%[a-z]
表示匹配字符范围内的任何一个字符。例如,%[a-z]
将匹配小写字母'a'到'z'之间的任何字符。
多个字符集和字符范围:%[abcxyz]
表示匹配字符集中的任何一个字符,或者%[a-z0-9]
表示匹配小写字母和数字字符范围内的任何一个字符。
结合其他格式化参数使用:%[^\n]
表示匹配除了换行符之外的任何字符,用于扫描一行文本。#include <stdio.h> int main() { char input[] = "asdw:af123:14512"; char str1[100]; char str2[100]; char str3[100]; sscanf(input, "%[^:]:%[^:]:%s", str1, str2, str3); printf("str1: %s\n", str1); printf("str2: %s\n", str2); printf("str3: %s\n", str3); return 0; }
如:有一个字符串“asdw:af123:14512”,要求使用提取此字符串中以':'位间隔的三段字符串,分别到str1,str2,str3中:
示范代码:
-
控制输出的总体格式:
-
"%flags.precisionspecifier":格式化字符串的一般形式,可以组合使用各种标志、宽度、精度和长度修饰符。
"%flags.precisionspecifier"是格式化输出的一般形式,它提供了更大的灵活性来控制输出的样式。下面是对这个格式化字符串的各个部分进行解释:
-
flags:标志位,用于控制输出的一些特殊行为。常见的标志位包括:
-
"-":左对齐输出。
-
"+":显示正数的正号,负数的负号。
-
" "(空格):正数前面加空格,负数前面加负号。
-
"0":在整数宽度不足时使用零进行填充。
-
"#":对于八进制和十六进制输出,添加前缀"0"和"0x"。
-
-
width:宽度字段,用于指定输出的最小宽度。可以使用一个整数值来指定宽度,不足宽度的部分会用空格进行填充。也可以使用"*"来动态指定宽度,需要额外的整数参数。
-
.precision:精度字段,用于指定浮点数的小数位数或字符串的截断长度。可以使用一个整数值来指定精度,例如"%.2f"表示保留两位小数。也可以使用"*"来动态指定精度,需要额外的整数参数。
-
length:长度修饰符,用于指定整数或浮点数的长度。常见的长度修饰符有:
-
"h":将整数或浮点数参数视为short类型或double类型。
-
"l":将整数或浮点数参数视为long类型或long double类型。
-
"ll":将整数参数视为long long类型。
-
"L":将浮点数参数视为long double类型。
-
-
specifier:指定输出的类型。常见的输出类型包括:
-
"d":以十进制整数形式输出。
-
"x":以十六进制整数形式输出(小写字母)。
-
"X":以十六进制整数形式输出(大写字母)。
-
"o":以八进制整数形式输出。
-
"f":以十进制浮点数形式输出。
-
"e":以指数形式(科学计数法)输出。
-
"g":以十进制或指数形式输出,根据数值大小自动选择合适的表示方式。
-
"c":输出一个字符。
-
"s":输出一个字符串。
-
通过使用这些选项和修饰符的组合,您可以更精确地控制格式化输出的样式。根据具体需求,可以选择适当的选项,并根据需要添加更多的格式化输出语句来满足需求。
-