printf是标准输出流的输出函数,用来向屏幕这样的标准输出设备输出,而fprintf则是向文件输出,将输出的内容输出到硬盘上的文件或是相当于文件的设备上

printf是有缓冲的输出,fprintf没有缓冲

fprintf()传送输出到一个流中的函数
原形:int fprintf(FILE *stream,const char *format[,argument,...])
功能:①向文件指针指向的文件输出ASCⅡ代码
   ②向显示器输出错误信息 
使用形式:
   ①fprintf(文件指针,"输出格式",输出项系列);
   ②fprintf(stderr,"错误信息");
使用实例:fprintf(stream,"%d %c %f",i,c,f);
     其中定义FILE *stream;
         int i; char c; float f;
返回值:成功则返回输出的字节数,错误则返回EOF。
头文件:stdio.h
===================================================
sprintf()格式化输出到数组的函数
原形∶int sprintf(buf,format,arg_list)
   其中char *buf;
功能∶把arg_list参量的值按format的格式输出到buf中。
例∶sprintf(buffer,"相对扇区号∶%s(其中∶柱面号为%d/磁头号为%d/扇区号为%d)",string,cyls,head,sector);
  其中char buffer[100];
    char *string="  ";
    int cyls,head,sector;
返回值∶实际写入数组的字符个数。
头文件∶stdio.h

sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
除了前两个参数类型固定外,后面可以接任意多个参数。而它的精华,显然就在第二个参数:
格式化字符串上。
printf 和sprintf 都使用格式化字符串来指定串的格式,在格式串内部使用一些以“%”开头的
格式说明符(format specifications)来占据一个位置,在后边的变参列表中提供相应的变量,最终
函数就会用相应位置的变量来替代那个说明符,产生一个调用者想要的字符串。
格式化数字字符串
sprintf 最常见的应用之一莫过于把整数打印到字符串中....

格式化读写函数fscanf和fprintf

  fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。 两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:

  fscanf(fp,"%d%s",&i,s);
  fprintf(fp,"%d%c",j,ch);

  用fscanf和fprintf函数也可以完成例10.6的问题。修改后的程序如例10.7所示。

  [例10.7]

#include<stdio.h>
struct stu
{
char name[10];
int num;
int age;
char addr[15];
}boya[2],boyb[2],*pp,*qq;
main()
{
FILE *fp;
char ch;
int i;
pp=boya;
qq=boyb;
if((fp=fopen("stu_list","wb+"))==NULL)
{
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
printf("\ninput data\n");
for(i=0;i<2;i++,pp++)
scanf("%s%d%d%s",pp->name,&pp->num,&pp->age,pp->addr);
pp=boya;
for(i=0;i<2;i++,pp++)
fprintf(fp,"%s %d %d %s\n",pp->name,pp->num,pp->age,pp->
addr);
rewind(fp);
for(i=0;i<2;i++,qq++)
fscanf(fp,"%s %d %d %s\n",qq->name,&qq->num,&qq->age,qq->addr);
printf("\n\nname\tnumber age addr\n");
qq=boyb;
for(i=0;i<2;i++,qq++)
printf("%s\t%5d %7d %s\n",qq->name,qq->num, qq->age,
qq->addr);
fclose(fp);
}

  与例10.6相比,本程序中fscanf和fprintf函数每次只能读写一个结构数组元素,因此采用了循环语句来读写全部数组元素。 还要注意指针变量pp,qq由于循环改变了它们的值,因此在程序的25和32行分别对它们重新赋予了数组的首地址。

最新文章

  1. 四大组件之ContentProvider
  2. AJAX原理及XMLHttpRequest对象分析
  3. VSFTPD添加用户
  4. (5)Quartz学习
  5. Windows Live Write 日志客户端
  6. 第二章IPC——IPC与开启多进程
  7. 最近一些朋友问我,临近快毕业了专业不对口,想转行看到IT行业就业前景不错,但是编程语言众多不了解,不知道哪门语言能够快速入门掌握,短期能让我找到工作
  8. 数据收集利器 cAdvisor - 每天5分钟玩转 Docker 容器技术(82)
  9. Codeforces 1092E Minimal Diameter Forest
  10. handoop安装部署集群
  11. R1题解
  12. Haskell语言学习笔记(37)RWS, RWST
  13. MySQL &quot;tinyInt1isBit or tinyint(1)&quot; 相关问题解析
  14. Oracle dba权限下修改用户密码 授予用户权限 解锁用户
  15. Android开发-eclipse+phonegap(Cordova)环境搭建
  16. Numpy 数据分析基础
  17. 关于SQL注入的五大报错注入函数
  18. svg在html的使用
  19. oracle DML-(insert、select、update、delete)
  20. 内存压缩PK页面交换 解决内存问题谁更在行

热门文章

  1. 结对项目:四则运算web
  2. iOS 怎么自定制推送声音呢?(APP运行时和APP进入后台时)
  3. Python入门:学会创建并调用函数
  4. syntax error:unexpected end of file
  5. python response.text和response.content的区别
  6. Redis 基础:Redis 事件处理
  7. Qt托盘程序
  8. Qss 样式表的尝试
  9. Alpha 冲刺 —— 十分之三
  10. bzoj4784【zjoi2017】仙人掌