• printf与fprintf函数的区别


    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(" input data ");
    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 ",pp->name,pp->num,pp->age,pp->
    addr);
    rewind(fp);
    for(i=0;i<2;i++,qq++)
    fscanf(fp,"%s %d %d %s ",qq->name,&qq->num,&qq->age,qq->addr);
    printf(" name number age addr ");
    qq=boyb;
    for(i=0;i<2;i++,qq++)
    printf("%s %5d %7d %s ",qq->name,qq->num, qq->age,
    qq->addr);
    fclose(fp);


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

  • 相关阅读:
    eclipse项目迁移到android studio(图文最新版)
    栈上分配存储器的方法 alloca 抽样
    【PHP】PHP获得第一章
    阿里2015回顾面试招收学历(获得成功offer)
    Linux 于 shell 变数 $#,$@,$0,$1,$2 含义解释:
    Codeforces 451E Devu and Flowers(容斥原理)
    hdu 4964 Emmet()模拟
    “度”思考
    Windows Auzre 微软的云计算产品的后台操作界面
    Java设计模式菜鸟系列(两)建模与观察者模式的实现
  • 原文地址:https://www.cnblogs.com/cyyljw/p/7170074.html
Copyright © 2020-2023  润新知