📜  用C格式说明符(1)

📅  最后修改于: 2023-12-03 15:27:09.375000             🧑  作者: Mango

用C格式说明符

C语言的格式说明符用于打印和扫描变量时指定输出的格式。格式说明符可以指定输出的长度、精度和对齐方式等。

在C语言中,格式说明符以百分号(%)开头,后面紧跟着一个或多个字符来指定输出格式。下面是常用的格式说明符。

整数格式说明符

| 格式说明符 | 描述 | | --- | --- | | %d或%i | 以十进制(有符号)形式输出 | | %u | 以十进制无符号形式输出 | | %o | 以八进制形式输出 | | %x或%X | 以十六进制形式输出 |

注:当使用%u,%o和%x的格式说明符时,不能用负数作为参数,否则会导致未定义的行为。

下面是一个例子:

int num = 10;
printf("%d\n", num); // 输出为10
printf("%o\n", num); // 输出为12(10的八进制形式)
printf("%x\n", num); // 输出为a(10的十六进制形式)
浮点数格式说明符

| 格式说明符 | 描述 | | --- | --- | | %f | 以十进制形式输出单、双精度浮点数 | | %e或%E | 以科学计数法形式输出单、双精度浮点数 | | %g或%G | 以%f或%e形式输出单、双精度浮点数,看哪个更短 |

注:由于计算机内部表示方式的限制,浮点数的精确度可能无法得到保证。因此,当比较两个浮点数时,应该使用相对误差而不是绝对误差。

下面是一个例子:

double pi = 3.14159265358979323846;
printf("%f\n", pi); // 输出为3.141593
printf("%.4f\n", pi); // 输出为3.1416(四舍五入到小数点后四位)
printf("%e\n", pi); // 输出为3.141593e+00
printf("%g\n", pi); // 输出为3.14159
字符格式说明符

| 格式说明符 | 描述 | | --- | --- | | %c | 输出一个字符 | | %s | 输出一个字符串 |

注:当使用%s格式说明符输出一个字符串时,需要指定一个指向字符串的指针作为参数。

下面是一个例子:

char ch = 'A';
char str[] = "Hello, world!";
printf("%c\n", ch); // 输出为A
printf("%s\n", str); // 输出为Hello, world!
宽字符和宽字符串格式说明符

如果需要处理Unicode字符和字符串,需要使用宽字符和宽字符串格式说明符。

| 格式说明符 | 描述 | | --- | --- | | %lc | 输出一个宽字符 | | %ls | 输出一个宽字符串 | | %C | 输出一个宽字符 | | %S | 输出一个宽字符串 |

注:当使用%ls或%S格式说明符输出一个宽字符串时,需要指定一个指向宽字符串的指针作为参数。

下面是一个例子:

wchar_t wch = L'中';
wchar_t wstr[] = L"你好,世界!";
printf("%lc\n", wch); // 输出为中
printf("%ls\n", wstr); // 输出为你好,世界!
其他格式说明符

| 格式说明符 | 描述 | | --- | --- | | %p | 输出一个指针的值 | | %n | 累计已经输出的字符数,并把结果存储在对应的参数中 | | %% | 输出百分号(%)本身 |

下面是一个例子:

int num = 10;
int *ptr = #
printf("%p\n", ptr); // 输出指针的值
int count;
printf("Hello, world!%n\n", &count); // 输出Hello, world!并把count的值设为这个字符串的长度
printf("The length of the string is %d.\n", count);