首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

格式化输入和输出

格式化输入和输出

这是来自一书中的一部分,因为里面有点有用的内容,所以摘录到这里留个备份.

3.6  格式化输入和输出
如果用C语言编写过程序,对那些按设计格式输出数据的库函数就应该比较熟悉。这些函数包括向一个文件流输出数据的printf系列函数和从一个文件流读取数据的scanf系列函数。
3.6.1  printf、fprintf和sprintf函数
printf系列函数能够对各种不同类型的参数进行格式编排和输出。每个参数在输出流中的表示形式是由格式参数format控制的,它是一个包含普通的可打印字符和称为“转换控制符”代码的字符串,转换控制符规定了其余的参数应该以何种方式被输出到何种地方。

printf函数把自己的输出送到标准输出。fprintf函数把自己的输出送到一个指定的文件流。sprintf函数把自己的输出和一个结尾空字符写到作为参数传递过来的字符串s里。这个字符串必须足够大以容纳所有的输出数据。Printf系列函数还有一些其他的成员,它们以各自不同的方式对其参数进行处理。详细资料请参考printf的使用手册。
普通字符在输出时不发生变化。转换控制符让printf取出传递过来的其他参数并对它们的格式进行编排。转换控制符总是以%字符开头。下面是一个简单的例子:

它在标准输出上产生如下的输出:

要想输出%字符,就必须使用%%,这样就不会与转换控制符混淆了。
下面是一些常用的转换控制符:
l %d:%i:以十进制格式输出一个整数。
l %o:%x:以八进制或十六进制格式输出一个整数。
l %c:输出一个字符。
l %s:输出一个字符串。
l %f:输出一个(单精度)浮点数。
l %e:以科学计数法格式输出一个双精度浮点数。
l %g:以一般格式输出一个双精度浮点数。
让传递到printf函数里的参数数目和类型与format字符串里的转换控制符匹配是非常重要的。整数参数的类型可以用一个可选的长度限定符来指定。它可以是h,例如%hd表示这是一个短整数(short int),或者l,例如%ld表示这是一个长整数(1ongint)。有的编译器能够对printf语句进行检查,但并不总是如此。如果你使用的是GNU编译器gcc,-Wformat选项可以完成这一工作。
下面是另外一个例子:

它的输出是:

你可以利用字段限定符对数据的输出格式做进一步的控制。它是对转换控制符的扩展,能够对输出数据的间隔进行控制。一个常见用法是设置浮点数的小数位数或设置字符串两端的空格数。
字段限定符是转换控制符里紧跟在%字符后面的数字。表3-5中列出了一些转换控制符示例及其输出情况。为了说明的更清楚,我们用垂直线字符来表示输出边界。
表 3-5

  

格    式

  
  

参    数

  
  

|        输出         |

  
  

%10s

  
  

“Hello”

  
  

|                    Hello|

  
  

%-10s

  
  

Hello”

  
  

|Hello                    |

  
  

%10d

  
  

1234

  
  

|                      1234|

  
  

%-10d

  
  

1234

  
  

|1234                      |

  
  

%010d

  
  

1234

  
  

|0000001234        |

  
  

%10.4f

  
  

12.34

  
  

|               12.3400|

  
  

%*s

  
  

10,”Hello”

  
  

|                    Hello|

  

上表中的所有示例都输出到一个10个字符宽的区域里。注意:负值的字段宽度表示数据在该字段里以左对齐的格式输出。可变字段宽度用一个星号(*)来表示。在这种情况下,下一个参数用来表示字段宽。%字符后面以0开头表示数据前面要用数字0填充。根据POSIX规范的要求,printf不对数据字段进行截断,而是扩充数据字段以适应数据的宽度。因此,如果想打印一个比字段宽长的字符串,数据字段会加宽,如表3-6所示。
表 3-6

  

格    式

  
  

参    数

  
  

|       输出        |

  
  

%10s

  
  

“HelloTherePeeps”

  
  

|HelloTherePeeps|

  

printf函数返回一个整数以表明它输出的字符个数。但在sprintf的返回值里没有算上结尾的那个null空字符。如果发生错误,这些函数会返回一个负值并设置errno。
继承事业,薪火相传
返回列表