国庆笔记03输入与输出数据

发布于 2024-10-03  1028 次阅读


输入与输出肯定要用的printf函数与scanf函数,他们都不可或缺地会用到格式占位符

在C语言中,格式占位符(format specifier)是用于指定如何格式化地输入或输出数据的符号,通常在 printfscanf 函数中使用。不同的数据类型有对应的格式占位符,用来告诉编译器如何解释变量的值。

下面是一些常用的格式占位符:

整数类型(主要对应int、short、long、long long)

  • %d%i:用于有符号(其实就是正负都行,与unsigned int 相对而已)的十进制整数(int 类型)。
    • 示例:printf("%d", 10); // 输出:10
    • %i不常用,但是却真的有

以下都是无符号,我感觉并不常用

  • %u:用于无符号十进制整数(unsigned int 类型)。
    • 示例:printf("%u", 10); // 输出:10
  • %x:用于无符号的十六进制整数,使用小写字母(unsigned int 类型)。
    • 示例:printf("%x", 255); // 输出:ff
    • 也就是说,你所选用的格式占位符是针对变量的类型来决定的,255是十六进制格式中的ff,所以你得选用%x,这样编译器才会理解你输入的数据是什么
    • C语言中是区分大小写的,所以%x与%X是有区别的
  • %X:用于无符号的十六进制整数,使用大写字母。
    • 示例:printf("%X", 255); // 输出:FF
  • %o:用于无符号的八进制整数(unsigned int 类型)。
    • 示例:printf("%o", 8); // 输出:10

浮点类型(主要对应float、double)

  • %f:用于输出浮点数(floatdouble 类型均可),默认情况下保留6位小数。
    • 示例:printf("%f", 3.14); // 输出:3.140000
  • %e:以科学计数法的形式输出浮点数(小写 e 表示指数部分)。
    • 示例:printf("%e", 12345.678); // 输出:1.234568e+04

在C语言中,1.234568e+04 和 1.234568e4 都是科学计数法的表示方式,本质上 没有任何数值上的区别。它们都表示同一个值,即 12345.68。它们的区别仅在于书写形式:e+04 和 e4 都表示乘以 104104,即将小数点向右移动 4 位。+ 符号是可选的,e+04 和 e4 表示的乘法效果相同。
因此,1.234568e+041.234568e4 数值相同,都是 12345.68,仅在表示上稍有不同

  • %E:同样以科学计数法输出,但使用大写 E 表示指数部分。
    • 示例:printf("%E", 12345.678); // 输出:1.234568E+04
    • 哈哈,感觉小写大写e在这里没什么区别(bushi
  • %g:根据数值的大小自动选择 %f%e 格式,去掉不必要的零
    • 示例:printf("%g", 12345.678); // 输出:12345.7

字符和字符串类型(主要对应char)

  • %c:用于输出单个字符。
    • 示例:printf("%c", 'A'); // 输出:A
  • %s:用于输出字符串。
    • 示例:printf("%s", "Hello"); // 输出:Hello

指针类型

  • %p:用于输出指针的值(内存地址)。
    • 示例:printf("%p", ptr); // 输出指针地址

其他

  • %%:用于输出 % 符号本身。
    • 示例:printf("%%"); // 输出:%

常用修饰符

  • 宽度和精度:你可以通过数字指定最小宽度或小数位数,例如:
    • %.2f:保留两位小数。
    • %10d:输出的整数至少占10个字符宽度

在默认情况下,数值是右对齐的,如果宽度指定得比实际内容要大,内容会向右靠,空白就会出现在左边,所以不必惊讶

eg:printf("%.2f", 3.14159);   // 输出:3.14
printf("%10d", 5);         // 输出:         5

这些格式占位符为数据的格式化输出提供了灵活性,帮助你根据不同的数据类型生成你想要的输出结果


既然谈到了格式占位符,下面给出详细介绍

1.让空白出现在左边:通过在宽度前加上负号 -,便可以让内容左对齐,右边补空格。

eg:printf("%-5d\n", 42); // 输出:"42   "

2.用零填充: 通过在宽度前加上 0,可以用 0 来填充左侧的空位,而不是空格。

eg:printf("%05d\n", 42); // 输出: "00042"

宽度结合精度

3.当你需要同时控制小数点后位数(精度)和总输出宽度时,可以同时使用宽度和精度控制符来实现

eg:printf("%8.3f\n", 3.14159); // 输出:"   3.142"

这里 %8.3f 表示输出的总宽度为8,小数点后保留3位。(注意:这里的小数点也是一个字符宽度)

届ける言葉を今は育ててる
最后更新于 2024-11-05