zoukankan      html  css  js  c++  java
  • C printf格式化输出

    转载:https://blog.csdn.net/wucz122140729/article/details/98434702

    格式化输出
           格式化输出的函数有printf、sprintf和snprintf等,功能略有不同,使用方法大同小异,本章节我们以printf为例。

           对于 printf 函数,相信大家并不陌生。之所以称它为格式化输出函数,该函数的声名如下:

                  int printf(const char *format, ...);

           大家看到printf函数的声明就会有点懵,它参数的写法与我们之前学到的函数知识不一样,printf函数是一个“可变参数函数”(即函数参数的个数是可变的),可变参数函数的知识以后再介绍,现在只要知道怎么使用就行了。

           printf函数的参数的个数和类型都是可变的,每一个参数的输出格式都有对应的格式说明符与之对应,从格式串的左端第 1 个格式说明符对应第 1 个输出参数,第 2 个格式说明符对应第 2 个输出参数,第 3 个格式说明符对应第 3 个输出参数,以此类推。

           其中,格式说明符的形式如下(方括号 [] 中的项为可选项):

           %[flags][width][.prec] type

    1、类型符(type)
           它用以表示输出数据的类型,以下是常用类型的汇总,不常用的就不列了。

           %hd、%d、%ld 以十进制、有符号的形式输出 short、int、long 类型的整数。

           %hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数

           %c 输出字符。

           %lf 以普通方式输出double(float弃用,long doube无用)。

           %e 以科学计数法输出double。

           %s 输出字符串。

          以上输出数据的知识在之前介绍数据类型的时候已演示过,这里就不举例了。

    2、宽度(width)
           它用于控制输出内容的宽度。

                printf("=%12s= ","abc");    // 输出=         abc=

                printf("=%12d= ",123);     // 输出=         123=

                printf("=%12lf= ",123.5);    // 输出=  123.500000=

    3、对齐标志(flags)
           flags它用于控制输出内容的对齐方式。

           不填或+:输出的内容右对齐,这是缺省的方式,上一小节就是右对齐的示例。

           -:输出的内容左对齐。

                 printf("=%-12s= ","abc");    // 输出=abc         =

                printf("=%-12d= ",123);     // 输出=123         =

                printf("=%-12f= ",123.5);    // 输出=123.500000  =

           如果输出的内容是整数或浮点数,并且对齐的方式是右对齐,可以加0填充,例如:

             printf("=%012s= ","abc");  // 输出=         abc=

             printf("=%012d= ",123);   // 输出=000000000123=

             printf("=%012f= ",123.5);  // 输出=00123.500000=

           从上面第一行代码的结果看出,输出的内容不是整数或浮点数,是字符串,不能在前面填0。

           左对齐的时候,能在整数或浮点数的后面补0吗?浮点数最多可以补到6位,整数不行,你的存款能在后面补0吗?

    4、精度(prec)
           如果输出的内容是浮点数,它用于控制输出内容的精度,也就是说小数点后面保留多少位,后面的数四舍五入。

           printf("=%12.2lf= ",123.5);   // 输出=      123.50=

           printf("=%.2lf= ",123.5);     // 输出=123.50=

           printf("=%12.2e= ",123500000000.0);  // 输出=    1.24e+11=

           printf("=%.2e= ",123500000000.0);    // 输出=1.24e+11=

    格式化输出到字符串
           int printf(const char *format, ...);

           int sprintf(char *str, const char *format, ...);

           int snprintf(char *str, size_t size, const char *format, ...);

           功能:printf是把结果输出到屏幕,sprintf把格式化输出的内容保存到字符串str中,snprintf的n类似于strncpy中的n,意思是只获取输出结果的前n-1个字符,不是n个字符。

           在之前的章节中,介绍过把字符串转换为整数和浮点数据的库函数,C语言没有提供把整数和浮点数据转换为字符串的库函数,而是采用sprintf和snprintf函数格式化输出到字符串。

           示例(book98.c)

           

           运行结果

           

           程序运行第二行只输出了14个字符,注意,snprintf函数在unix和windows平台下的表现略有不同,在windows平台下,第二行会输出15个字符。

    C语言多行书写
           在我们之前学习的过程中,编写的程序的功能很简单,一句代码很短,但是在实际开发中,参数往往很长很多,一句代码可能会很长,需要用多行才能书写。

           如果我们在一行代码的行尾放置一个反斜杠,c语言编译器会忽略行尾的换行符,而把下一行的内容也算作是本行的内容。这里反斜杠起到了续行的作用。

           

           如果我们不使用反斜杠,当我们试图初始化一个跨多行的字符串时,c语言编译器可能会发出警告或错误。如下面的语句所示:

           

           C语言中还有一种拆分字符串的方法,那就是将其写个多个字符串,C语言编译器会自动将这些字符串连接起来。因此,下面的表达式:"aaaaa"  "bbbbb" "ccccc" 实际上相当于 "aaaaabbbbbccccc"。

           

           多行书写的方法如下:

           

           把字符串很长,参数很多的代码用多行书写,可以使程序代码结构更清晰,以下代码是我实际开发中用到的一句代码,这还不算长的。

           
    ————————————————
    版权声明:本文为CSDN博主「C语言技术网-码农有道」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/wucz122140729/java/article/details/98434702

  • 相关阅读:
    C#将datatable生成easyui的绑定tree 的json数据格式
    asp.net DataTable转JSON
    asp.net面试题
    windows笔记线程的一些性质
    windows笔记创建线程的另一个函数_beginthreadex
    windows笔记【内核对象线程同步】等待定时器内核对象
    windows笔记用哪个创建线程CreateThread还是_beginthread
    windows笔记【内核对象线程同步】信标内核对象
    windows笔记【内核对象线程同步】事件内核对象
    windows笔记【内核对象线程同步】等待函数
  • 原文地址:https://www.cnblogs.com/yichengming/p/12829330.html
Copyright © 2011-2022 走看看