C语言如何认识 printf()函数的格式字符?

一、问题

printf()函数对输出格式到底该如何控制呢?

二、解答

对不同类型的数据⽤不同的格式字符串,其中常⽤的有以下⼏种格式字符。

1、格式字符d

格式字符d⽤于输出⼗进制整数。有以下⼏种⽤法:

(1)%d

按整型数据的实际长度输出。

(2)%md

m 为指定的输出字段的宽度。如果数据的位数⼩于m,则左端补以空格;若⼤于 m,则按实际位数输出。

(3)%ld

输出长整型数据。

cpp 复制代码
#include <stdio.h>
int main()
{
    int i, k;
    long j;
    i = 12;
    j = 34567;
    k = 789;
    printf("%d,%d\n", i, k);
    printf("%4d,%2d\n", i, k);
    printf("%ld\n", j);
    return 0;
}

输出结果如下

cpp 复制代码
12,789
  12,789
34567    

2、格式字符o

格式字符o⽤于以⼋进制形式输出整数。有以下⼏种⽤法:

(1)%o

按整型数据的实际长度输出。

(2)%mo

m 为指定的输出字段的宽度。如果数据的位数⼩于m,则左端补以空格;若⼤于 m,则按实际位数输出。

(3)%lo

输出长整型数据。

cpp 复制代码
#include <stdio.h>
int main()
{
    int i = 123;
    printf("%d,%o\n", i, i);
    return 0;
}

输出结果如下

cpp 复制代码
123,173

注意:

由于⼋进制数不带符号,故将内存单元中各位转换成⼋进制时将符号位也⼀起作为⼋进制数的⼀部分输出。

3、格式字符x

格式字符x⽤于以⼗六进制形式输出整数。有以下⼏种⽤法:

(1)%x

按整型数据的实际长度输出。

(2)%mx

m 为指定的输出字段的宽度。如果数据的位数⼩于 m,则左端补以空格, 若⼤于 m,则按实际位数输出。

(3)%lx

输出⻓整型数据。

cpp 复制代码
#include <stdio.h>
int main()
{
    int i = 123;
    printf("%d,%o,%x\n", i, i, i);
    return 0;
}

输出结果如下

cpp 复制代码
123,173,7b

4、格式字符u

格式字符u⽤于以⼗进制形式输出⽆符号型数据。 下⾯举例说明格式字符u的具体应⽤。

cpp 复制代码
#include <stdio.h>
int main()
{
    int i, j;
    i = -3, j = 3;
    printf("%d,%d\n", i, j);
    printf("%u,%u\n", i, j);
    return 0;
}

输出结果如下

cpp 复制代码
-3,3
4294967293,3

5、格式字符c

格式字符c⽤于输出⼀个字符。

说明:

0~255范围内的整数,也可以⽤字符形式输出。同样,⼀个字符数据也可以⽤整数形式输出。

cpp 复制代码
#include <stdio.h>
int main()
{
    int i=98;
    char ch='a';
    printf("%c,%d\n", i, ch);
    return 0;
}

输出结果如下

cpp 复制代码
b,97

6、格式字符s

格式字符s⽤于输出⼀个字符串。有以下⼏种⽤法:

(1)%s

将字符串按实际长度输出。

(2)%ms

输出的字符串占 m 列。如果字符串本⾝长度⼤于m,则突破m 的限制, 将字符串全部输出;若字符串长度⼩于 m,则左补空格。

(3)%-ms

如果字符串长度⼩于m,则在 m列范围内,字符串向左靠,右补空格。

(4)%m.ns

输出占 m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。

(5)%-m.ns

输出长整型数据。输出占 m 列,但只取字符串中左端 n个字符。这n个字符输出在 m 列的左侧,右补空格。

cpp 复制代码
#include <stdio.h>
int main()
{
    char *str = "helloworld";
    printf("%s\n", str);
    printf("%10.5s\n", str);
    printf("%-10.2s\n", str);
    printf("%.3s\n", str);
    return 0;
}

输出结果如下

cpp 复制代码
helloworld
     hello
he        
hel

7、格式字符f

格式字符f⽤于以⼩数形式输出实型数据。有以下⼏种⽤法:

(1)%f

不指定字段宽度,整数部分全部输出,⼩数部分输出6位。

(2)%m.nf

输出的数据占 m 列,其中有n位⼩数。如果数值⻓度⼩于m,则左端补空格。

(3)%-m.nf

输出的数据占 m列,其中有n位⼩数。如果数值⻓度⼩于 m,则右端补空格。

注意:

以%f 形式输出的数据并不全都是准确的,只有前7 位数字是有效数字。双精度数同样可⽤%f输出。

cpp 复制代码
#include <stdio.h>
int main()
{
    float i = 1234.567898765;
    double j = 1234.567898765;
    printf("%f\n", i);
    printf("%15.2f\n", i);
    printf("%-10.3f\n", i);
    printf("%f\n", j);
    return 0;
}

输出结果如下

cpp 复制代码
1234.567871
        1234.57
1234.568  
1234.567899

8、格式字符e

格式字符e⽤于以指数形式输出实型数据。有以下⼏种⽤法:

(1)%e

不指定输出数据所占的宽度和⼩数位数。

(2)%m.ne

输出的数据占m 位,其中有n位⼩数。如果数值长度⼩于m,则左端补 空格。

(3)%-m.ne

输出的数据占 m 位,其中有n 位⼩数。如果数值长度⼩于 m,则右端补空格。

注意:

输出的指数形式中的指数符号"+"算⼀位。

cpp 复制代码
#include <stdio.h>
int main()
{
    float i = 1234.567898765;
    double j = 1234.567898765;
    printf("%e\n", i);
    printf("%15.2e\n", i);
    printf("%-10.3e\n", j);
    return 0;
}

输出结果如下

cpp 复制代码
1.234568e+03
       1.23e+03
1.235e+03 

9、格式字符g

格式字符g⽤于以%f%e 中较短的输出宽度输出单、双精度实数, 即根据数字的⼤⼩,⾃动选择f格式或e格式。

|-------------|-------------------------|
| 表⽰输出类型的格式字符 | 含义 |
| d | 以⼗进制形式输出带符号整数(正数不输出符号) |
| o | 以⼋进制形式输出⽆符号整数(不输出前缀o) |
| x | 以⼗六进制形式输出⽆符号整数(不输出前缀Ox) |
| u | 以⼗进制形式输出⽆符号整数 |
| c | 输出单个字符 |
| s | 输出字符串 |
| f | 以⼩数形式输出单、双精度实数 |
| e | 以指数形式输出单、双精度实数 |
| g | 以%f%e中较短的输出宽度输出单、双精度实数 |

cpp 复制代码
说明:

(1)除了格式字符x、e、g在使⽤时可以⼤写外,其余格式字符必须⼩写。 
(2)在进⾏字符"%〞的输出时要注意,必须在格式控制中连写两个%,才能得到预期的效果。

例如:
    printf("%d%%",100);    //输出为:100%。    
相关推荐
Yeauty几秒前
Rust 中的高效视频处理:利用硬件加速应对高分辨率视频
开发语言·rust·ffmpeg·音视频·音频·视频
落榜程序员2 分钟前
Java 基础-30-单例设计模式:懒汉式与饿汉式
java·开发语言
charlie1145141914 分钟前
STM32F103C8T6单片机硬核原理篇:讨论GPIO的基本原理篇章1——只讨论我们的GPIO简单输入和输出
c语言·stm32·单片机·嵌入式硬件·gpio·数据手册
划水哥~5 分钟前
创建QMainWindow菜单栏
开发语言·c++·qt
矿渣渣6 分钟前
int main(int argc, char **argv)C语言主函数参数解析
c语言·开发语言
阿让啊10 分钟前
bootloader+APP中,有些APP引脚无法正常使用?
c语言·开发语言·stm32·单片机·嵌入式硬件
饕餮ing13 分钟前
C++的UDP连接解析域名地址错误
开发语言·c++·udp
莲动渔舟15 分钟前
Nyquist插件基础:打印格式化字符串(LISP语言)
开发语言·lisp·音频处理·audacity
满怀101526 分钟前
Python入门(5):异常处理
开发语言·python
攀小黑29 分钟前
Java 多线程加锁 synchronized 关键字 字符串当做key
java·开发语言