c和指针 之“输入输出”总结

转载自:http://blog.csdn.net/nowdoit/article/details/6163109


1. 先来几个小的程序!

 

  1. /*Test 1*/  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4.   
  5. int main(int argc,char *argv[])  
  6. {  
  7.     printf("%d",3.14);  
  8.     printf("%d",(int)3.14);  
  9.     return 0;  
  10. }  
  1. /*Test 2*/  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4.   
  5. int main(int argc,char *argv[])  
  6. {  
  7.     char c;  
  8.     while(c != 'a')  
  9.     {  
  10.         c = getchar();  
  11.         putchar(c);  
  12.         fflush(stdin);  
  13.     }  
  14.     return 0;  
  15. }  

 

运行Test 1,发现输出的第一个并不是3,第二次输出的才是3。这是因为printf("%d")的格式解析原因;printf不会因为前面的%d,进行类型转换,%d只说明printf按照整型的内存格式对数据进行读取,double型在内存中的存储方式和int型不同,而且double占8个字节,int占4个字节,printf取了前面4个字节。

运行Test 2,发现除了如果一次输入多个字符的话,只能显示一个字符;这就是fflush(stdin)的作用,清空缓冲区!但是这种方式只对部分编译器有效(如VC6),并非所有的编译器都支持这个功能(如gcc)

 

2. 为什么会存在freopen()这个函数?

    这是函数原型:FILE *freopen(char *filename, char *type, FILE *stream);

    主要用于文件重定向,比如freopen("1.txt","w",stdout);实现了将标准输出定向到文本1.txt中的目的。

 

3. 使用%-6.10s打印会有什么效果?

    左侧对其,保留10位,如不足10位并且大于6位,则全部显示,如不足六位则占用六位,右侧使用空格补齐!

 

4. 使用%f打印的时候,存在着四舍五入的情况。

 

5. 输入/输出函数家族

    5.1 单个字符实现

          getchar()、putchar():从标准输入读入字符(或者向标准输出输出字符),是函数

          getc()、fgetc()、putc()、fputc():接收(或输出)流参数,以宏的方式实现

    5.2 一行字符实现

          fgets()、gets():前者接收流参数,后者从标准输入读取,二者都是读取一行内容

          fputs()、puts():前者输出流到文本中,后者从输出文本到标准输出上,二者都是输出一行内容

 

6. 格式化输入/输出函数家族

    6.1 格式化输入实现

          fscanf():接收一个流参数

          sscanf():从内存缓冲区中读取

          scanf():从标准输入中读取

    6.2 格式化输出实现

          fprintf()、sprintf()、printf()和上面的是一一对应的。

 

7. 除了上面处理文本,也就是ascii编码实现的函数外,有专门的对二进制数据进行读写的,分别是fread()和fwrite();

 

8. 改变流读写顺序和位置函数

    ftell()、fseek()、fgetpos()、fsetpos()、rewind()等。

 

9. 改变缓冲区的设置

    setbuf()、setvbuf();后者更为通用。

 

10. 临时文件等文件命令函数

    tmpfile():创建临时文件

    tmpnam():创建临时文件名

    remove():删除文件

    rename():修改文件名

 

11. 处理错误函数

    ferror():出现错误,返回错误信息

    clearerr():重置错误状态

 

12. 如何得到perror函数可能打印的所有错误信息列表?

 

 

 

注:本文中函数名func()只代表函数名,并不能完整的包括返回值以及参数列表情况。如需要请自行查询!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值