STM32编程Printf函数语法

Printf函数语法

函数声明

printf 函数的声明如下:

// C99 前
int printf( const char *format, ... );
// C99 起
int printf( const char *restrict format, ... );

参数列表

format – 是格式控制字符串,包含了两种类型的对象:普通字符和转换说明 。在输出时,普通字符将原样不动地复制到标准输出,转换说明并不直接输出而是用于控制 printf 中参数的转换和打印。每个转换说明都由一个百分号字符(%)开始,以转换说明结束,从而说明输出数据的类型、宽度、精度等 。
printf 的格式控制字符串 format 中的转换说明组成如下,其中 [] 中的部分是可选的:
%[flags][width][.precision][length]specifier,即:%[标志][最小宽度][.精度][类型长度]说明符 。转换说明详解见下文。
附加参数 – 根据不同的 format 字符串,函数可能需要一系列的附加参数,每个参数包含了一个要被插入的值,替换了 format 参数中指定的每个 % 标签。参数的个数应与 % 标签的个数相同。

功能

printf 函数在输出格式 format 的控制下,将其参数进行格式化,并在标准输出设备(显示器、控制台等)上打印出来。

返回值

如果函数执行成功,则返回所打印的字符总数,如果函数执行失败,则返回一个负数。

函数说明及应用示例编辑

转换说明详解

format 转换说明组成是%[flags][width][.precision][length]specifier ,具体讲解如下:

说明符(specifier)

说明符(specifier)用于规定输出数据的类型,含义如下:
STM32编程Printf函数语法_第1张图片

示例代码:

// 以下程序用于输出各种格式化数据(其中 “\n” 表示换行的转义字符,具体见下文的转义字符说明):

#include 
int main() {
    char ch = 'h';
    int count = -9234;
    double fp = 251.7366;
 
    // 显示整数
    printf( "Integer formats:\n"
            "   Decimal: %d  Unsigned: %u\n", count, count);
    printf( "Decimal %d as:\n   Hex: %Xh  "
            "C hex: 0x%x  Octal: %o\n", count, count, count, count );
    // 显示字符
    printf("Characters in field:\n"
          "%10c\n", ch);
    // 显示实数
    printf("Real numbers:\n   %f %.2f %e %E\n", fp, fp, fp, fp );
 
    return 0;
}
  
//程序运行结果:
Integer formats:
   Decimal: -9234  Unsigned: 4294958062
Decimal -9234 as:
   Hex: FFFFDBEEh  C hex: 0xffffdbee  Octal: 37777755756
Characters in field:
         h
Real numbers:
   251.736600 251.74 2.517366e+002 2.517366E+002

flags(标志)

标志(flags)用于规定输出样式,含义如下:
STM32编程Printf函数语法_第2张图片

示例代码:

#include 
#define PAGES 931
int main() {
    const double RENT = 3852.99;  // const-style constant
 
    printf("*%-10d*\n", PAGES);                            //左对齐,右边补空格
    printf("*%+4.2f*\n", RENT);                            //输出正负号
    printf("%x %X %#x\n", 31, 31, 31);                     //输出0x
    printf("**%d**% d**% d**\n", 42, 42, -42);             //正号用空格替代,负号输出
    printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);  //前面补0
 
    return 0;
}
  
//程序运行结果:
*931       *
*+3852.99*
1f 1F 0x1f
**42** 42**-42**
**    6**  006**00006**  006**

width(最小宽度)

最小宽度(width)用于控制显示字段的宽度,取值和含义如下:
STM32编程Printf函数语法_第3张图片
示例代码: [3]

#include 
#define PAGES 931
int main() {
    printf("*%2d*\n", PAGES);         //输出的字段长度大于最小宽度,不会截断输出
    printf("*%10d*\n", PAGES);        //默认右对齐,左边补空格      
    printf("*%*d*\n", 2, PAGES);      //等价于 printf("*%2d*\n",PAGES)
    return 0;
}
  
//程序运行结果:
*931*
*       931*
*931*

.precision(精度)

精度(.precision)用于指定输出精度,取值和含义如下:
STM32编程Printf函数语法_第4张图片

示例代码:

#include 
int main() {
    const double RENT = 3852.99;  // const-style constant
    printf("*%4.2f*\n", RENT);
    printf("*%3.1f*\n", RENT);
    printf("*%10.3f*\n", RENT);
 
    return 0;
}
  
//程序运行结果:
*3852.99*
*3853.0*
*  3852.990*

length(类型长度)

类型长度(length)用于控制待输出数据的数据类型长度,取值和含义如下:
STM32编程Printf函数语法_第5张图片

示例代码:

#include 
#define PAGES 336
int main() {
    short num = PAGES; 
    long n3 = 2000000000;     long n4 = 1234567890; 
     printf("num as short and unsigned short:  %hd %hu\n", num, num);     printf("%ld %ld\n", n3, n4);
 
    return 0;
}
  
//程序运行结果:
num as short and unsigned short:  336 336 2000000000 1234567890

转义序列

转义序列在字符串中会被自动转换为相应的特殊字符。printf() 使用的常见转义字符如下:
STM32编程Printf函数语法_第6张图片

示例代码: [2]

#include 
int main(void) {
    printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");
    return 0;
}
 
//程序运行结果:
This
is
a
test
 
She said, "How are you?"

注意事项编辑

函数返回值

printf 函数的返回值为其输出字符串常量的字符数(注意字符数与字数的区别),注意计数针对所有的打印字符,包括空格和不可见的换行字符(不包括字符串的空字符)。

打印较长字符串

有时printf 语句会很长,以至于不能在一行被放下,如果我们必须分割一个字符串,有以下三种方式可以选择。需要注意的是,我们可以在字符串中使用 “\n” 换行符来表示换行字符,但是在字符串中不能通过回车键来产生实际的换行字符。

示例代码:

#include 
int main() {
    //方式一:使用多个printf语句
    printf("Here's one way to print a ");
    printf("long string.\n");
      
    //方式二:使用反斜杠 "\" 加回车的组合来进行分割,注意下一行要从最左侧开始,否则缩进会成为该字符串的一部分
    printf("Here's another way to print a \
long string.\n");
      
    //方式三:采用字符串连接的方法,中间不能有逗号,可以是空格或者回车
    printf("Here's the newest way to print a "
          "long string.\n");      /* ANSI C */
      
    return 0;
}
 
//程序运行结果:
Here's one way to print a long string.
Here's another way to print a long string.
Here's the newest way to print a long string.

参考原文:《百度百科-printf格式化输出函数》

你可能感兴趣的:(STM32,stm32,嵌入式硬件,单片机)