printf 订阅
printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 。printf 函数的一般调用格式为:printf("<格式化字符串>", <参量表>) [1]  。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义 [2]  。 展开全文
printf 是指格式化输出函数,主要功能是向标准输出设备按规定格式输出信息。printf 是C语言标准库函数,定义于头文件 。printf 函数的一般调用格式为:printf("<格式化字符串>", <参量表>) [1]  。输出的字符串除了可以是字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义 [2]  。
信息
外文名
printf [1]
头文件
stdio.h [1]
特    点
变参函数 [1]
中文名
格式化输出函数 [1]
功    能
向标准输出设备按规定格式输出信息 [1]
返回值
打印字符串的长度 [3]
printf函数语法
printf 函数的声明如下: [4]  printf 的格式控制字符串 format 中的转换说明组成如下,其中 [] 中的部分是可选的: [5]  %[flags][width][.precision][length]specifier,即:%[标志][最小宽度][.精度][类型长度]说明符 [5]  。转换说明详解见下文。 printf 函数在输出格式 format 的控制下,将其参数进行格式化,并在标准输出设备(显示器、控制台等)上打印出来。 [1]  如果函数执行成功,则返回所打印的字符总数,如果函数执行失败,则返回一个负数。 [3] 
收起全文
精华内容
下载资源
问答
  • 在STM32F103单片机上实现自定义串口2的printf函数,串口1用系统默认printf函数,串口2自定义函数printf函数,实现和默认printf函数同样的功能。
  • S32K144在FreeRTOS下使用printf格式化输出,不依赖与本地库文件,可直接编译通过
  • 本文详细介绍了嵌入式开发领域中常用的printf函数重定义的方法,适合于那些想要了解printf函数原理以及对其进行重定义使用的同学
  • keil/MDK中使用printf通过串口输出字符的方法,用于工程调试,使用很爽。
  • STM32 的 printf 重定向

    2016-11-28 23:01:03
    基于 STM32 平台的 平printf 重定向
  • C++ scanf和printf格式化输入输出

    千次阅读 多人点赞 2019-06-18 16:09:32
    C++ scanf和printf格式化输入输出 本文用于介绍scanf和printf的基本使用方法

    C++ scanf和printf格式化输入输出

    本文用于介绍scanf和printf的基本使用方法

    1. scanf

    数据类型格式符举例
    int%dscanf("%d",&n);
    long long%lldscanf("%lld",&n);
    float%fscanf("%f",&fl);
    double%lfscanf("%lf",&db);
    char%cscanf("%c",&c);
    char数组%sscanf("%s",str);

    助记:需要把数据往一个地址中写。所以,第二个参数是地址,而数组名称本身就代表了数组第一个元素的地址。

    例:

    char str[10];
    scanf("%s", str);//abc efg
    printf("%s", str);//abc
    

    注意

    1. %c可以读取空格和换行,其他的格式符(包括%s)都是以空白符(空格,换行)为结束判断标志的。除非使用%c把空格按字符读入,其他情况都会自动跳过空格。
    2. string类型不可以通过scanf读取
    string s1;
    scanf("%s", s1);//abc
    printf("%s", s1);//abc
    

    但如果使用cin来读取,printf输出,就会得到帼n

    是因为scanf对C++所有类都不支持,包括string。使scanf兼容string的解决方法自行百度吧,这里记录的是我常用的方法。
    第3条会记录string的读取和输出方法。

    2. printf

    数据类型格式符举例
    int%dprintf("%d",n);
    long long%lldprintf("%lld",n);
    float%fprintf("%f",fl);
    double%fprintf("%f",db);
    char%cprintf("%c",c);
    char数组%sprintf("%s",str);

    double类型的格式符是%f,需要和scanf中的%lf区分。建议浮点数就使用double类型,精度高。

    输出格式

    %[flags][width][.precision][length]格式字符

    格式符说明
    flags-靠左对齐
    +强制在正数前输出+,复数前输出-
    #使用o,x,X时,在数据前加0,0x,0X
    width%md宽度,若数据小于宽度,在左边补上空格
    %0md宽度,若数据小于宽度,在左边补上0
    .precisionp浮点数输出p位小数,不是四舍五入,四舍五入找round

    注意:
    如果不加width,那么输出浮点数就会默认精确到小数点后6位。

    例:

    double d = 3.15;
    printf("%.1f", d);//3.1
    
    展开全文
  • 实现了printf,通过该代码可以做出类似sprintf等,代码没有涉及浮点,所以代码量很少,非常适合学习使用
  • STM32串口通信 USART1(printf+USER_printf
  • C51实现printf打印

    2013-08-16 11:28:37
    C51实现printf打印,使用周立功软件编译并下载测试通过
  • printf实现

    热门讨论 2011-11-09 15:45:40
    这是arm-linux-gcc编译下的裸机程序,解决了除法以及浮点数问题,以及c库问题。并且自己实现了printf,通过串口打印调试信息。
  • printf函数 重定义printf函数。

    千次阅读 2020-05-21 23:08:37
    printf 的宏定义版本 前言: 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦...




    printf 的宏定义版本






    前言:

    我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。

    比如,定义一个宏开关:

    #define __DEBUG

    当需要调试的时候,使用语句:

    #ifdef __DEBUG

    printf(xxx);

    #endif

    这种方式的调试,可以通过undef __DEBUG的方式让告知编译器不编译这些语句,从而不再输出这些语句。但是这种方式的麻烦之处也是显而易见的,每一条调试语句都需要使用两条宏定义来包围,这不但在代码的编写上不便,源码结构也不好看,工作量依然不小。

    如果我们能够把这三条语句编程一条,那该多舒服呀~,于是,我们想到使用这样的语句:

    #ifdef __DEBUG

    #define DEBUG(info)    printf(info)

    #else

    #define DEBUG(info)

    #endif

    这样,我们在编写代码的时候,使用DEBUG一条语句就可以了,我们把宏开关__DEBUG打开,所有的DEBUG(info)宏定义信息都会被替换为printf(info),关上则会被替换成空,因此不会被编译。嗯,这次方便多了,一条语句就可以了~~~ 但是,问题也随之而来了,printf是支持多个参数的,而且是不定参数,当你使用下面这样的语句时就会报错:

    DEBUG("%s",msg)

    这是因为,DEBUG(info)这条宏定义只支持一个参数的替换。

    因此,我们希望DEBUG能够像printf那样,支持多个参数,并且这些参数刚好展开成为printf语句本身使用的参数,譬如:我们希望DEBUG("%s",msg)能够展开为printf("%s",msg)

    正文:

    通过网上的资料查阅,发现自C99规范以后,编译器就开始支持不定参数的宏定义,就像printf一样。

    大家可以看看这篇文章:http://blog.csdn.net/aobai219/archive/2010/12/22/6092292.aspx

    (这个链接也转的,我已经找不到原始作者到底是谁了,唉,互联网啊。。。)

    于是,我们定义了一个这样的东东:

    #define DEBUG(format, ...) printf (format, ##__VA_ARGS__)(' ## '的意思是,如果可变参数被忽略或为空,将使预处理器( preprocessor )去除掉它前面的那个逗号。)

    于是乎,我们神奇地发现,DEBUG完全取代了printf,所有的DEBUG(…)都被完成的替换成了printf(…),再也不会因那个可恶的逗号而烦恼了。

    但是,我们发现,光有printf还不够,虽然调试信息是输出了,可是很多的调试信息输出,我们并不能一下子知道这条信息到底是在那里打印出来的,于是,我们又想,能不能把当前所在文件名和源码行位置也打印出来呢,这样不就一目了然了吗,哪里还用的着去想,去找调试信息在哪里输出的呢,都已经打印出来了!

    于是我们就有了下面的故事。。。

    编译器内置宏:

    先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。

    ANSI C标准中有几个标准预定义宏(也是常用的):

    __LINE__:在源代码中插入当前源代码行号;

    __FILE__:在源文件中插入当前源文件名;

    __DATE__:在源文件中插入当前的编译日期

    __TIME__:在源文件中插入当前编译时间;

    __STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;

    __cplusplus:当编写C++程序时该标识符被定义。

    编译器在进行源码编译的时候,会自动将这些宏替换为相应内容。

    看到这里,你的眼睛应该一亮了吧,嗯,是的,__FILE__和__LINE__正是我们前面想要的输出的,于是,我们的每一条语句都变成了:

    DEBUG("FILE: %s, LINE: %d…",__FILE__,__LINE__,…)

    其实没有必要,__FILE__本身就会被编译器置换为字符常量,于是乎我们的语句又变成了这样:

    DEBUG("FILE:"__FILE__", LINE: %d…",__LINE__,…)

    但是,我们还是不满足,依然发现,还是很讨厌,为什么每条语句都要写"FILE:"__FILE__", LINE: %d 以及,__LINE,这两个部分呢?这不是浪费我们时间么?

    哈哈,是的,这就是本次大结局,把DEBUG写成这样:

    DEBUG(format,...) printf("FILE: "__FILE__", LINE: %d: "format"/n", __LINE__, ##__VA_ARGS__)

    没错,就是这样!下面,所有的DEBUG信息都会按照这样的方式输出:

    FILE: xxx, LINE: xxx, …….

    最后:

    最后,老规矩,coding测试。

    ·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
    1. //============================================================================  
    2. // Name : debug.cpp  
    3. // Author : boyce  
    4. // Version : 1.0  
    5. // Copyright : pku  
    6. // Description : Hello World in C++, Ansi-style  
    7. //============================================================================  
    8. #include  
    9. #define __DEBUG__  
    10. #ifdef __DEBUG__  
    11. #define DEBUG(format,...) printf("File: "__FILE__", Line: %05d: "format"/n", __LINE__, ##__VA_ARGS__)  
    12. #else  
    13. #define DEBUG(format,...)  
    14. #endif  
    15. int main() {  
    16.     char str[]="Hello World";  
    17.     DEBUG("A ha, check me: %s",str);  
    18.     return 0;  
    19. }  
     

     

    测试结果:


    展开全文
  • 51单片机实现scanf和printf

    热门讨论 2014-02-27 16:53:58
    51单片机实现scanf和printf函数,在需要格式化输出输入时使用,方便很多,不必在进行取余取整运算,而且输出格式自定义,跟windows下的使用方法一样。
  • 利用51单片机C语言实现printf函数的功能,带PROTEUS仿真源文件,带源程序。
  • printf中的指针变量As we know that, printf() is used to print the text and value on the output device, here some of the examples that we wrote to use the printf() in a better way or for an advance ...

    printf中的指针变量

    As we know that, printf() is used to print the text and value on the output device, here some of the examples that we wrote to use the printf() in a better way or for an advance programming.

    众所周知, printf()用于在输出设备上打印文本和值,这里是我们编写的一些示例,它们以更好的方式或为了进行高级编程而使用了printf() 。

    1) Print normal text

    1)打印普通文字

    printf ("Hello world");
    
    

    Output

    输出量

    Hello world
    
    

    2) Print text in new line

    2)在新行中打印文本

    printf ("Hello world\nHow are you?");
    
    

    Output

    输出量

    Hello world
    How are you?
    
    

    3) Print double quote

    3)打印双引号

    To print double quote, we use \".

    要打印双引号,我们使用\“ 。

    printf("Hello \"World\", How are you?\n");
    
    

    Output

    输出量

    Hello "World", How are you?
    
    

    4) Print percentage sign (%)

    4)列印百分比符号(%)

    To print percentage sign/ character, we use %%.

    要打印百分比符号/字符,我们使用%% 。

    printf ("Hey I got 84.20%% in my final exams\n");
    
    

    Output

    输出量

    Hey I got 84.20% in my final exams
    
    

    5) Print octal value

    5)打印八进制值

    To print octal value, we use %o (It's alphabet o in lowercase)

    要打印八进制值,我们使用%o (小写的字母o)

    int num = 255;
    printf("num in octal format: %o\n", num);
    
    

    Output

    输出量

    num in octal format: 377
    
    

    6) Print hexadecimal value (with lowercase alphabets)

    6)打印十六进制值(使用小写字母)

    To print hexadecimal value, we use %x (its alphabet 'x' in lowercase) - as we know that a hexadecimal value contains digits from 0 to 9 and alphabets A to F, "%x" prints the alphabets in lowercase.

    要打印十六进制值,我们使用%x (小写的字母“ x”)-因为我们知道十六进制值包含从0到9的数字和字母A到F, “%x”以小写字母打印。

    int num = 255;
    printf ("num in hexadecimal format(lowercase) : %x\n", num);
    
    

    Output

    输出量

    num in hexadecimal format(lowercase) : ff
    
    

    7) Print hexadecimal value (with uppercase alphabets)

    7)打印十六进制值(使用大写字母)

    To print hexadecimal value, we use %X (it's alphabet X in uppercase) - as we know that a hexadecimal value contains digits from o to 9 and alphabets A to F, "%X" prints the alphabets in uppercase.

    要打印十六进制值,我们使用%X (大写字母X)-因为我们知道十六进制值包含从o到9的数字和字母A至F, “%X”将大写字母。

    int num = 255;
    printf ("num in hexadecimal format(uppercase) : %X\n", num);
    
    

    Output

    输出量

    num in hexadecimal format(uppercase) : FF
    
    

    8) Print long string using \ (slash)

    8)使用\(斜杠)打印长字符串

    If there is a long string, that you want to print with a single printf() with two or more lines, we can use slash (\).

    如果有一个很长的字符串,而您想使用带有两行或更多行的单个printf()进行打印,则可以使用斜杠( \ )。

    printf ("Hello world, how are you?\
    I love C programing language.\n");
    
    

    Output

    输出量

    Hello world, how are you?    I love C programing language.
    
    

    9) Print backslash (\)

    9)打印反斜杠(\)

    To print backslash (\), we use double backslash (\\).

    要打印反斜杠( \ ),我们使用双反斜杠( \\ )。

    printf ("The file is store at c:\\files\\word_files\n");
    
    

    Output

    输出量

    The file is store at c:\files\word_files
    
    

    10) To get total number of printed characters

    10)获取打印字符总数

    We can also get the total number of printed character using printf(), printf() returns the total number of printed character, that we can store in a variable and print.

    我们还可以使用printf()获得打印字符的总数, printf()返回打印字符的总数,我们可以将其存储在变量中并进行打印。

    int len = 0;
    len = printf ("Hello\n");
    printf ("Length: %d\n", len);
    
    

    Output

    输出量

    Hello
    Length: 6
    
    
    

    11) Print integer value 5 digit left padded with 0

    11)打印整数值左5位填充0

    To print value with 0 padded in 5 digits, we can use "%05d".

    要打印以5位数字填充0的值,我们可以使用“%05d” 。

    int num = 255;
    printf ("num (padded): %05d\n", num);
    
    

    Output

    输出量

    num (padded): 00255
    
    

    12) Print text with left and right padding

    12)使用左右填充符打印文本

    To print left padded text with space, we use "%20s" - Here, 20 is the number of characters, if string contains 5 characters then 15 spaces will be added at the left of the text.

    要打印带有空格的左填充文本,我们使用“%20s” -这里的字符数为20,如果字符串包含5个字符,则将在文本左侧添加15个空格。

    Similarly, to print right padded text with space, we use a flag "-" like "%-20s" - Here, 20 is the number of characters, if string contains 5 characters then 15 spaces will be added at the right of the text.

    类似地,要打印带有空格的右填充文本,我们使用标记“-”,例如“%-20s” -这里的20是字符数,如果字符串包含5个字符,则将在文本右边添加15个空格。

    printf ("str1=\"%20s\", str2=\"%-20s\"\n", "Hello", "World");
    
    

    Output

    输出量

    str1="               Hello", str2="World               "
    
    

    13) Print float value to specified number of digits after the decimal point

    13)将浮点值打印到小数点后的指定位数

    To print float value with specified number of digits after the decimal, we use "%.2f". Here, 2 is the number of digits after the decimal point.

    要在小数点后打印具有指定位数的浮点值,请使用“%.2f” 。 在此,2是小数点后的位数。

    float val = 1.234567;
    printf("val = %.2f\n", val);
    
    

    Output

    输出量

    val = 1.23
    
    

    14) Print integer value with "%i" format specifier

    14)使用“%i”格式说明符打印整数值

    While printing the value "%d" and "%i" are same, they are used to print an integer value, we can also print the integer value by using "%i".

    虽然打印值“%d”和“%i”相同,但是它们用于打印整数值,我们也可以使用“%i”打印整数值。

    int num = 255;
    printf("num = %i \n", num);
    
    

    Output

    输出量

    num = 255
    
    

    15) “%p” can be used to print the address of a variable

    15)“%p”可用于打印变量的地址

    Since, address of the variable is a large hexadecimal value - to print it we should not (or cannot) use "%d", "%i" etc. To print an address of a variable, we must use "%p".

    由于变量的地址是一个大的十六进制值-要打印它,我们不应该(或不能)使用“%d” , “%i”等。要打印变量的地址,我们必须使用“%p” 。

    int num = 255;
    printf("Address of num is: %p\n", &num);
    
    

    Output

    输出量

    Address of num is: 0x7ffca0b5855c
    
    

    上述所有printf()语句的示例 (Example with all above printf() statements )

    #include <stdio.h>
    
    int main()
    {
        int num = 255;
        int len = 0;
        float val = 1.234567;
        
        printf("Hello World");
        printf("Hello world\nHow are you?");
        printf("Hello \"World\", How are you?\n"); 
        printf ("Hey I got 84.20%% in my final exams\n");
        printf("num in octal format: %o\n", num);
        printf ("num in hexadecimal format(lowercase) : %x\n", num);
        printf ("num in hexadecimal format(uppercase) : %X\n", num);
        printf ("Hello world, how are you?\
        I love C programing language.\n");
        printf ("The file is store at c:\\files\\word_files\n");
        len = printf ("Hello\n");
        printf ("Length: %d\n", len);
        printf ("num (padded): %05d\n", num);
        printf ("str1=\"%20s\", str2=\"%-20s\"\n", "Hello", "World");
        printf("val = %.2f\n", val);
        printf("num = %i \n", num);
        printf("Address of num is: %p\n", &num);
               
        return 0;
    }
    
    

    Output

    输出量

    Hello WorldHello world
    How are you?Hello "World", How are you?
    Hey I got 84.20% in my final exams
    num in octal format: 377
    num in hexadecimal format(lowercase) : ff
    num in hexadecimal format(uppercase) : FF
    Hello world, how are you?    I love C programing language.
    The file is store at c:\files\word_files
    Hello
    Length: 6
    num (padded): 00255
    str1="               Hello", str2="World               "
    val = 1.23
    num = 255
    Address of num is: 0x7ffca0b5855c
    
    
    

    翻译自: https://www.includehelp.com/c-programs/printf-examples-variations.aspx

    printf中的指针变量

    展开全文
  • Java格式化输出printf()详解

    千次阅读 多人点赞 2020-09-14 14:11:05
    本文通过实例详细介绍Java格式化输出 System.out.printf() 方法的使用、参数的含义、格式转换符使用时的注意事项。

    概要: 本文通过实例详细介绍Java格式化输出 System.out.printf() 方法的使用、参数的含义、格式转换符使用时的注意事项。


    System.out.printf() 是 Java 5 开始引入的,用法类似 C语言的 printf() 函数, 但注意存在一定差异

    1. printf API

    // 使用指定的格式字符串和参数将格式化字符串写入入到输出流
    public PrintStream printf(String format, Object ... args)
    
    // 基于本地化环境使用指定的格式字符串和参数将格式化字符串写入到输出流
    public PrintStream printf(Locale l, String format, Object ... args)
    

    以上2个方法,当 format 为 null 时,抛出 NPE.

    2. 参数说明

    1. format

    format 是以百分号(%) 开头的格式说明字符串,具体格式如下

     %[argument_index$][flags][width][.precision]conversion
    

    img-01

    • 可选的 argument_index 是十进制整数,表示参数列表中参数的位置。 第一个参数由“ 1$ ”引用,第二个由“ 2$ ” 引用 ,等等。 argument_index 必须紧跟%后面,并以$ 结束。

      note: 参数索引值从1开始,而不是从0开始,%1$ 对第一个参数格式化。这就避免了与0标志混淆。

    • 可选 flags 指定格式化输出外观的各种标志。 有效标志集取决于 conversion。

    • 可选 width是正十进制整数,表示要写入到输出的字符个数(注意对于浮点数:也包含小数点所占的1个字和 负数的负号所占的1个字符)当实际字符数小于指定的宽度时,最前面用 flags 指定的标志填充(若未指定,默认用空格)。

      eg: v=2.3, %5.2f 输出5.20,且前面包含1个空格。共打印5个字符,整数位1个5,1个小数点,2个精度,长度为4,比指定的宽度少1为,用1个前导空格代替。

    • 可选 precision 是一个非负十进制整数,通常用于限制字符数。 具体行为取决于转换。

    • conversion (必需) 是一个字符,指示如何格式化参数。 给定参数的有效转换集取决于参数的数据类型。

    表1-用于printf flags(标志) 说明

    标志目的示例
    +打印正数和负数的符号+3333.33
    空格在正数之前添加空格| 3333.33|
    0数字前面补0003333.33
    -左对齐(不指定-时,默认为右对齐)|3333.33 |
    (将负数括在括号内%d,-90输出(90)
    ,(英文逗号)添加分组分隔符,只对定点浮点数整数部分添加分组分隔符,小数部分不会添加3,333.33
    #(对于f格式)包含小数点3,333.
    #(对于x或o格式)添加前缀0x或00xcafe
    $指定要格式化的参数索引。例如,%1 d d %1 dx 将以十进制和十六进制格式打印第1个参数159 9F
    <<格式化前面说明的数值。例如,%d<%x 将以十进制和十六进制打印同一个值159 9F

    表2-用于printf conversion(转换符) 说明

    转换符类型示例转换符类型示例
    d十进制整数159s字符串hello
    x十六进制整数9fc字符H
    o八进制整数237b布尔true
    f定点浮点数1.59e+01h散列码42628b2
    e指数浮点数tx或Yx日期时间(T强制大写)已经过时,应当改为使用 java.time 类。
    g通用浮点数(e和f中较短的一个)——%百分号%
    a16进制浮点数0x1.fccdp3n与平台有关的换行符——

    补充1: 使用 s 转换符格式化任意的对象

    可以使用 s 转换符格式化任意的对象。 对于实现了 Formattable 接口的任意对象,将调用这个对象的 formatTo 方法;否则调用 toString 方法将这个对象转换为字符串。

    补充2: String.format()

    使用 String.format() 方法可创建一个格式化的字符串,而不打印输出。API:

    public static String format(String format, Object... args)
    public static String format(Locale l, String format, Object... args)   
    

    参数和 printf() 中的含义相同。

    表3-日期和时间的转换符

    Note: 以下格式符已经过时,对于新的代码,应当使用 java.time 包的方法。

    eg: System.out.printf("%tc",new Date());这条语句将用下面的格式打印当前的日期和时间:

    Mon Feb 09 18:05:19 PST 2015
    

    下面的转换符前面都必须用 t/T 修饰。

    转换符类型示例
    c完整的日期和时间Mon Feb 09 18:05:19 PST 2015
    FISO 8601日期2015/2/9
    D美国格式的日期(月/日/年)02/09/2015
    T24小时时间18:05:19
    r12小时时间6:05:19
    R24小时时间,没有秒18:05
    Y4位数字的年(前面补02015
    y年的后两位数字(前面补0)15
    C年的前两位数字(前面补0)20
    B月的完整拼写February
    b或h月的缩写Feb
    m两位数字的月(前面补0)02
    d两位数字的日(前面补0)09
    e两位数字的日(前面不补09
    A星期几的完整拼写Monday
    a星期几的缩写Mon
    j三位数的年中第几天(前面补0),在001到366之间069
    H两位数字的小时(前面补0),在0到23之间18
    k两位数字的小时(前面不补0),在0到23之间18
    I两位数字的小时(前面补0),在01到12之间06
    l两位数字的小时(前面不补0),在1到12之间6
    M两位数字的分钟(前面补0)05
    S两位数字的秒(前面补0)19
    L三位数字的毫秒(前面补0)047
    N九位数字的毫微秒(前面补0)047000000
    p上午或下午的标志pm
    z从 GMT 起,RFC 822 数字位移-800
    Z时区PST
    s从格林尼治时间 1970-01-01 00:00:00 起的秒数1078884319
    Q从格林尼治时间 1970-01-01 00:00:00 起的毫秒数1078884319047

    从上表可以看到,某些格式只给出了指定日期的部分信息。例如,只有日期或月份。如果需要多次提供日期来分别格式化每一部分就太笨拙了。为此,可以用一个格式字符串指示要格式化的参数索引。索引必须紧跟在%后面,并以$终止。例如,

    System.out.printf("%1$s %2$tB %2$te, %2$tY","Due date:",new Date());
    

    会打印

    Due date: February 9, 2015
    

    还可以选择使用<标志。它指示前面格式说明中的参数将被再次使用。也就是说,以下语句将产生与前面语句同样的输出结果:

    System.out.printf("%1$s %tB %<te, %<tY","Due date:",new Date());
    

    2. args

    args : 格式字符串中格式说明符引用的参数。如果参数多于格式说明符,则忽略额外参数。 参数的数量是可变的,可以为零。 参数的最大数量受The Java Virtual Machine Specification(java虚拟机规范)定义的Java数组的最大维数限制。 null参数上的行为取决于 conversion(转换符) 。

    3. locale

    数字和日期的格式化规则是特定于本地化环境的。 例如,在德国,分组分隔符是点号而不是逗号,另外 Monday被格式化为 Montag。locale主要用于如何控制应用的国际化行为。

    3.printf 使用实例

    // +199 199 c7 307 0xc7 0307
    System.out.printf("%+d %<d %<x %<o %<#x %<#o\n",199);
    
    // | 23| |23|
    System.out.printf("|% d| |%<d|\n",23);
    
    // hello 第5个字符是o,that's true
    System.out.printf("%s 第%d个字符是%c,that's %b\n","hello",5,'o',true);
    
    // 15 % 6 = 3
    System.out.printf("%2$d %% %1$d = %3$d\n",6,15, 15 % 6);
    
    // |  7.33| |007.33| |7.330000| 0x1.d51eb851eb852p2
    System.out.printf("|%6.2f| |%0<6.2f| |%<f| %<a\n",7.33);
    
    // | 211.79| |211.79 |
    System.out.printf("|%7.2f| |%<-7.2f|\n",211.79);
    
    // | -211.79| |(211.79)| |(-211.79)|
    System.out.printf("|%8.2f| |%<(8.2f| |(%<.2f)|\n",-211.79);
    
    // |-21171.3333| |-21,171.3333| |-2.1171e+04| |-2.117e+04|
    System.out.printf("|%.4f| |%<,.4f| |%<.4e| |%<.4g|\n",-21171.3333);
    
    String str = new String("tree");
    // Note: %h 格式符输出对象的散列码 和 调用对象的hashCode 得到的值并不相同
    // obj %h formatinput: 36739e,hashCode:3568542
    System.out.printf("obj %%h formatinput: %h,hashCode:%s\n",str,str.hashCode());
    
    // true 25 0.0032 含
    System.out.printf("%s %s %s %s\n",true,25,3.2e-3,'含');
    
    System.out.printf("|%n| \n","world");
    System.out.printf("|%n| \n");
    

    输出

    +199 199 c7 307 0xc7 0307
    | 23| |23|
    hello 第5个字符是o,that's true
    15 % 6 = 3
    |  7.33| |007.33| |7.330000| 0x1.d51eb851eb852p2
    | 211.79| |211.79 |
    | -211.79| |(211.79)| |(-211.79)|
    |-21171.3333| |-21,171.3333| |-2.1171e+04| |-2.117e+04|
    obj %h formatinput: 36739e,hashCode:3568542
    true 25 0.0032 含
    |
    | 
    |
    | 
    

    关于 printf 转换符使用的注意事项

    • 适用于浮点类型转换符(e,g,a,f)不能用于整形; 同样适用于整形的转换符(d,o,x)不能用于浮点型。
    • 可以使用 s 转换符格式化任意的对象。 对于实现了 Formattable 接口的任意对象,将调用这个对象的 formatTo 方法;否则调用 toString 方法将这个对象转换为字符串。

    eg:

    // test in jdk 8,11,14
    
    // Exception in thread "main" java.util.IllegalFormatConversionException: o != java.lang.Float
    System.out.printf("%o\n",2.3f);
    
    // Exception in thread "main" java.util.IllegalFormatConversionException: f != java.lang.Integer
    System.out.printf("%f\n",25);
    
    (本文完)
    展开全文
  • 在MSP430G2553串口重定向,可使用C标准库实现printf,进行串口输出。同时采用另一种方式(不使用C标注库)实现串口标准输出,调试通过,程序中有详细注释说明
  • STM32F4 UART4重定向printf和scanf函数

    热门讨论 2014-01-25 19:04:25
    printf和scanf重定向串口,直接打印到串口,方便调试,非常好用。自己写的,求下载啊
  • 输入输出函数(printf 和 scanf)是C语言中非常重要的两个函数,也是学习C语言必学的两个函数。在C语言程序中,几乎没有一个程序不需要这两个函数,尤其是输出函数(printf),所以这两个函数必须要掌握。 如果在...
  • 自己实现printf函数

    千次阅读 2019-05-29 13:33:19
    printf格式字符如下所示, 格式字符 说明 d 以带符号的十进制形式输出整数(整数不输出符号) u 以无符号十进制形式输出整数 ...
  • scanf与printf的用法

    千次阅读 2020-10-20 07:33:10
    文章目录前言一、scanf与printf二、使用方法1、printf的使用方法2、scanf的使用方法总结 前言 学习c语言编程,必不可少的操作就是键盘输入与屏幕输出。今天我想讲讲自己对scanf与printf使用的看法 一、scanf与...
  • c语言printf()输出格式大全

    万次阅读 多人点赞 2019-07-04 16:19:13
    %s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)。 %ms:输出的字符串占m列,如字符串本身长度大于m,则突破获m的限制,将字符串全部输出。若串长小于m,则左补空格。 %-ms:如果串长小于m,则在...
  • printf的源代码

    2011-08-18 13:39:51
    printf的源代码,了解printf具体的代码。printf的源代码,了解printf具体的代码。
  • printf重定向,在STM32的IAR环境下的printf重定向实例程序
  • C语言-printf()函数

    万次阅读 多人点赞 2018-09-28 00:12:34
    /*函数原型 : int printf(const char *restrict format,...); * 参数:format:指向指定数据转译方式的空终止多字节字符串的指针 * 返回值:返回输出到输出流的字符数,若出现输出错误或编码错误,返回一个...
  • C++之printf函数

    千次阅读 多人点赞 2020-02-23 21:20:36
    printf的第一个参数是字符串,字符串表示输出格式。 %d表示数据,从第2个参数开始,依次替换字符串中的%d。 %0.2d表示,如果数据是个位数,依旧输出两位数(在前面加0)。 Printf详解 从上面的例子可以看到...
  • printf()函数详解

    千次阅读 多人点赞 2019-08-25 14:22:28
    1. printf()简介 printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。 函数原型: int printf ( const char * format,...
  • printf()用法详解

    万次阅读 多人点赞 2018-05-07 20:04:40
    1.printf()简介printf()是C语言标准库函数,用于将格式化后的字符串输出到标准输出。标准输出,即标准输出文件,对应终端的屏幕。printf()申明于头文件stdio.h。函数原型:int printf ( const char * format, ... );...
  • c语言printf输出语句A printf() function is a standard library function, that is used to print the text and value on the standard output screen. Here, we will evaluate the expression – where a printf()...
  • printf_s与printf的异同

    千次阅读 2019-09-25 16:16:13
    The main difference between printf_s and printf is that printf_s checks the format string for valid formatting characters, whereas printf only checks if the format string is a null pointer....
  • printf输出格式

    千次阅读 2019-05-06 12:58:52
    printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b); //b=138.357620,138.357620,138.3576,1.383576e+02 printf("c=%lf,%f,%8.4lf\n",c,c,c); //c=35648256.364569,35648256.364569,35648256.3646 printf("d=%c,%8c\n",d,d...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,359,456
精华内容 1,343,782
关键字:

printf