当前位置: 首页 > news >正文

【C#学习笔记04】C语言格式化输出

引言

​printf()​​函数不仅可以将数据输出到控制台,还可以通过格式化字符串灵活地控制输出的格式。​​printf()​​​函数的使用规则,包括标志说明、字段宽度、转换精度、长度修饰、转换说明、转义字符。


1. ​​printf()​​函数概述

​printf()​​函数是C语言标准库中的一个格式化输出函数,定义在​​<stdio.h>​​头文件中。

int printf(const char *format, ...);
  • format​:格式化字符串,用于指定输出的格式。
  • ...​:可变参数列表,用于提供要输出的数据。
  • 返回值:成功时返回输出的字符数,失败时返回负值。
#include <stdio.h>int main() {int num = 42;printf("The answer is %d\n", num);return 0;
}

输出

The answer is 42

2. 格式化字符串详解

格式化字符串是​​printf()​​函数的核心,它由普通字符和格式说明符组成。格式说明符以​​%​​​开头,用于指定输出的格式。

2.1 标志说明

标志用于控制输出的对齐方式、符号显示等。常见的标志包括:

  • -​:左对齐(默认右对齐)。
  • +​:显示正数的符号。
  • ​(空格):正数前显示空格,负数前显示负号。
  • #​:对八进制和十六进制数添加前缀(​​0​​或​​0x​​)。
  • 0​​:用前导零填充字段宽度。
#include <stdio.h>int main() {int num = 42;printf("|%10d|\n", num);   // 右对齐,宽度10printf("|%-10d|\n", num);  // 左对齐,宽度10printf("|%+d|\n", num);    // 显示符号printf("|% d|\n", num);    // 正数前显示空格printf("|%#x|\n", num);    // 十六进制带前缀printf("|%010d|\n", num);  // 前导零填充return 0;
}

输出

|        42|
|42        |
|+42|
| 42|
|0x2a|
|0000000042|

2.2 字段宽度

字段宽度是指在格式化输出时,为某个数据项预留的最小字符数。它通过格式说明符中的数字来指定,例如%5d表示输出一个整数,并且至少占用5个字符的宽度。如果实际数据的字符数少于指定的字段宽度,系统会自动用填充字符来补足空缺部分。默认情况下,填充字符是空格,但可以通过在格式说明符中添加前导零(如%05d)来指定用零填充。

字段宽度的主要作用是控制输出的对齐和格式化,使数据在显示时更加整齐和易读。在输出表格或报表时,字段宽度可以确保各列数据对齐,避免因数据长度不一致而导致格式混乱。此外,字段宽度还可以用于处理数字的前导零填充,比如在显示日期或时间时,可以用%02d来确保月份或小时数始终显示为两位数。

实际编程中字段宽度的使用非常灵活。printf("%10s", "Hello")会输出字符串“Hello”,并在其左侧填充5个空格,使总宽度达到10个字符。而printf("%05d", 42)则会输出“00042”,用前导零将整数42填充到5位。通过合理设置字段宽度,可以轻松实现数据的对齐和格式化,提升程序输出的可读性和美观性。

#include <stdio.h>int main() {int num = 42;printf("|%5d|\n", num);   // 宽度5printf("|%2d|\n", num);   // 宽度2(实际宽度大于指定宽度)return 0;
}

输出

|   42|
|42|

2.3 转换精度

​转换精度是格式化输出中的一个重要概念,主要用于控制浮点数的小数位数或字符串的最大字符数。精度的设置通过在格式说明符中添加一个点号(.)和一个整数来实现。例如,%.2f表示输出浮点数时保留两位小数,而%.5s表示输出字符串时最多只显示前5个字符。

对于浮点数,转换精度的作用是限制小数部分的位数,从而使输出结果更加简洁和规范。使用printf("%.3f", 3.14159)会输出“3.142”,将浮点数四舍五入到小数点后三位。这在需要高精度计算或显示时非常有用,比如在科学计算、金融领域或图形绘制中。

对于字符串,转换精度的作用是限制输出的字符数量。printf("%.4s", "Hello World")会输出“Hell”,只显示字符串的前4个字符。这在处理长字符串或需要截断输出的场景中非常实用,比如在显示文件名或日志信息时。

需要注意的是,如果未指定精度,系统会使用默认值。浮点数默认输出6位小数,而字符串则会输出整个内容。通过灵活使用转换精度,开发者可以更精确地控制输出格式,满足不同的需求。例如,在输出表格数据时,可以使用%.2f来统一浮点数的显示格式,或者使用%.10s来限制字符串的长度,确保表格整齐美观。

#include <stdio.h>int main() {double pi = 3.1415926535;printf("|%.2f|\n", pi);   // 保留2位小数printf("|%.5s|\n", "Hello, World!");  // 输出前5个字符return 0;
}

输出

|3.14|
|Hello|

2.4 长度修饰

长度修饰符是格式化输入输出函数(如​​printf​​​和​​​scanf​​​)中的一个重要组成部分,用于指定参数的类型大小。长度修饰符通常与格式说明符结合使用,以确保数据能够以正确的类型和大小进行读取或输出。常见的长度修饰符包括以下几种:

h​:表示短整型(​​short int​​)。例如,​​%hd​​用于格式化输出或读取一个​​short int​​类型的整数。这在处理较小范围的整数时非常有用,可以节省内存空间。

l​:表示长整型(​​long int​​)。例如,​​%ld​​用于处理​​long int​​类型的整数,适用于需要更大范围的整数运算。此外,​​%lu​​用于无符号长整型(​​unsigned long int​​)。

ll​:表示长长整型(​​long long int​​)。例如,​​%lld​​用于处理​​long long int​​类型的整数,适用于需要非常大范围的整数运算。​​%llu​​则用于无符号长长整型(​​unsigned long long int​​)。

L​:表示长双精度浮点型(​​long double​​)。例如,​​%Lf​​用于处理​​long double​​类型的浮点数,适用于需要更高精度的浮点运算。

长度修饰符的作用是确保数据类型的正确性,避免因类型不匹配而导致的数据截断或错误。在输出一个​​long long int​​类型的变量时,如果不使用​​%lld​​而错误地使用​​%d​​,可能会导致输出结果不正确。同样,在读取数据时,使用正确的长度修饰符可以确保数据被正确解析和存储。

长度修饰符的使用非常广泛。在处理时间戳、大整数计算或高精度科学计算时,​​%lld​​和​​%Lf​​等修饰符能够确保数据的完整性和准确性。通过合理使用长度修饰符,开发者可以更好地控制数据的类型和范围,提升程序的健壮性和可靠性。

#include <stdio.h>int main() {short num1 = 42;long num2 = 1234567890;long double pi = 3.1415926535;printf("|%hd|\n", num1);   // 短整型printf("|%ld|\n", num2);   // 长整型printf("|%.10Lf|\n", pi);  // 长双精度浮点型return 0;
}

输出

|42|
|1234567890|
|3.1415926535|

2.5 转换说明

转换说明符用于指定输出的数据类型。常见的转换说明符包括:

  • d​、​i​:有符号十进制整数。
  • u​:无符号十进制整数。
  • o​:无符号八进制整数。
  • x​、​X​:无符号十六进制整数(​​x​​表示小写,​​X​​表示大写)。
  • f​、​F​:浮点数。
  • e​、​E​:科学计数法表示的浮点数。
  • g​、​G​:根据值的不同自动选择​​f​​或​​e​​格式。
  • c​:字符。
  • s​:字符串。
  • p​:指针地址。
#include <stdio.h>int main() {int num = 42;double pi = 3.1415926535;char ch = 'A';char str[] = "Hello, World!";printf("|%d|\n", num);     // 十进制整数printf("|%x|\n", num);     // 十六进制整数(小写)printf("|%f|\n", pi);      // 浮点数printf("|%e|\n", pi);      // 科学计数法printf("|%c|\n", ch);      // 字符printf("|%s|\n", str);     // 字符串printf("|%p|\n", &num);    // 指针地址return 0;
}

输出

|42|
|2a|
|3.141593|
|3.141593e+00|
|A|
|Hello, World!|
|0x7ffee4b5c8fc|

2.6 转义字符

转义字符是一种特殊的字符序列,用于表示无法直接输入或显示的特殊字符,或者用于控制输出的格式。转义字符以反斜杠(​​\​​)开头,后跟一个或多个字符,用于表示特定的含义。常见的转义字符包括以下几种:

\n​:换行符用于在输出中插入一个新行,使后续内容从下一行开始显示例如:

printf("Hello,\nWorld!");

输出结果为:

Hello,
World!

\t​:制表符用于在输出中插入一个水平制表符,通常相当于多个空格,用于对齐文本例如:

printf("Name:\tJohn\nAge:\t25");

输出结果为:

Name:   John
Age:    25

\\​:反斜杠用于表示一个实际的反斜杠字符,因为单独的反斜杠会被解释为转义字符的开始。例如:

printf("Path: C:\\Program Files\\MyApp");

输出结果为:

Path: C:\Program Files\MyApp

\"​:双引号用于在字符串中插入一个双引号字符,因为双引号在C语言中用于表示字符串的开始和结束。例如:

printf("He said, \"Hello!\"");

输出结果为:

He said, "Hello!"

\'​:单引号用于在字符常量中插入一个单引号字符,因为单引号在C语言中用于表示字符常量的开始和结束。例如:

printf("It\'s a nice day.");

输出结果为:

It's a beautiful day.

除了上述常见的转义字符外,C语言还支持其他一些转义字符:

  • \b​:退格符,将光标向左移动一个位置。
  • \r​:回车符,将光标移动到当前行的开头。
  • \f​:换页符,用于控制打印机的换页操作。
  • \a​:响铃符,用于发出蜂鸣声(在某些终端中有效)。
  • \0​:空字符,用于表示字符串的结束。

转义字符能够灵活地处理特殊字符和控制输出格式。在生成表格、格式化文本或处理文件路径时,转义字符可以帮助实现精确的输出效果。理解转义字符的含义也有助于避免常见的编程错误,比如字符串或字符常量中的引号未正确转义导致的语法错误。


部分内容参考:

c语言的基本类型及输入输出占位符 - dzy2831 - 博客园

一篇文章带你看清C语言中的类型转换规则-阿里云开发者社区



http://www.mrgr.cn/news/94316.html

相关文章:

  • 深度剖析 Doris 数据倾斜,优化方案一网打尽
  • 【二分查找 寻找首端】P3718 [AHOI2017初中组] alter|普及+
  • uniapp实现 uview1 u-button的水波纹效果
  • 使用memmove优化插入排序
  • 新闻网页信息抽取
  • JVM 垃圾回收器的选择
  • 广播机制(Broadcasting)
  • 项目组织管理类型-职能式组织和矩阵式组织的区别
  • HOT100——二叉树篇Leetcode236. 二叉树的最近公共祖先
  • windows 下用docker 部署nginx
  • 项目组织管理类型-矩阵式组织和组合式组织的区别
  • RSA混合加密RSA混合加密
  • MySQL 8 设置允许远程连接(Windows环境)
  • 使用 Excel 实现绩效看板的自动化
  • 微信小程序:实现多功能表格效果,例如滚动效果、宽度自定义、多选、行内编辑等功能
  • 如何在Ubuntu上构建编译LLVM和ISPC,以及Ubuntu上ISPC的使用方法
  • 【不动产登记全解析】范围、内容与不予登记的情形
  • Android 11.0 监听某个app启动或者退出功能实现
  • 【Pandas】pandas Series last_valid_index
  • 什么是OF