zoukankan      html  css  js  c++  java
  • 文件字符读写函数fscanf()和 fgets() 比较

    一、 文件格式化读入函数 fscanf()

     int  fscanf(文件指针,格式化字符串,输入列表);

     返回值: 整形,输入列表中定义字符串的个数。

    1, 例如读取字符串:

    char  str1[256], str2[256];

    FILE  *file;

    int n,m;

    n=fscanf(file,"%s%s",str1,str2);      \n=2

    m=fscanf(file,"%s%s ",str1,str2);   \m=2,格式字符串中可以加入格式控制符

     

    2, fscanf()函数读入开始和结束:

    读入开始:从第一个实字符开始,即从第一个非空格符‘ ’、非跳格符tab、非回车换行符‘ ’、非EOF开始。

    读入结束:读入过程中遇到的第一个空格符‘ ’、跳格符tab 、 回车换行符‘ ’ 或者EOF。

     

    3,  注意:fscanf()并不读入结束符,也就是空格符、回车符、跳格符tab本身不会被输入字符串。

    4,举例如下:

    E盘下有文件  e:\test.txt,文件内容如下:

    endloop
    endfacet next
    triangle

    程序实例case 1:

    int main()
    {
        FILE *file;
        file=fopen("e:\test.txt","r");
    
        char str[256];
    int n(0); if(1!=fscanf(file,
    "%s",str)) //读入字符串个数为1,所以返回值为1
    return false;
    long strLenth(0); strLenth=strlen(str); //字符串str长度为7,并未取入第一行末尾回车换行符;
    //此时文件指针file指向第一行最后的回车
    换行字符' '
    
        cout<<"lenth of str:"<<strLenth<<endl; //7
    printf("%s",str); //"endloop"

    printf(
    "%c ",fgetc(file)); //获取并输出test.txt文件第一行最后的回车换行字符' '
        printf("%c
    ",fgetc(file)); //读入并输出test.txt文件第二行开头字符'e'  

    fclose(file);
    }

     

    程序实例case2:

    int main()
    {
         FILE *file;
        file=fopen("e:\test.txt","r");
    
        char str1[256], str2[256];
    
        fscanf(file,"%*s"); //跳过第一个字符"endfacet",file指向第一行最后一个字符回车换行符'
    '
    
        if (2 != fscanf(file,"%s %s
    ",str1,str2))  return false; 
    //file执行向str1,str2读入两个字符串;由于fscanf()规定从第一个非空格、非回车换行符、非文件结尾开始读入,
    //所以file跳过当前指向的' ',从第二行开始读入;
    读入字符串个数为2,所以返回值为2; //因为输入格式字符串"%s %s "最后加了回车控制符,所以file当前指向第二行第一个字符. printf("%s %s ",str1,str2); //"endfacet next" printf("%c ",fgetc(file)); //输出test.txt文件第二行开头字符't' fclose(file); }

    二、从文件读入一个字符串函数 fputs()

    char *  fgets(str,n,fp);

    返回值:返回字符串 str的首地址。

    n为要求得到的字符数,但只能从文件fp输入n-1个字符,第n个字符为自动加入的'/0'。

    1, 例如:

     char *pCh;

     char str[128];

     FILE *file;

     pCh=fgets(str, 128, file);

    2, fgets()读取的开始和结束:

        fgets()读入开始:所有非EOF开始的字符,即fgets()可以以空格‘ ’、跳格tab、回车换行符' '开始读入。

        fgets()读入结束:读完n-1个字符之前,遇到换行‘ ’、文件结束EOF。

    3, 注意:fgets()函数在读完n-1个字符之前,可以读入空格符' ', 回车符'/n',也可以以他们为开始读入。

    4, 举例:

    main()
    {
           FILE *file;
        file=fopen("e:\test.txt","r");
    
        char vmarker[256];
        fgets(vmarker,256,file); //读入文件第一行字符
    
        long strLenth(0);
        strLenth=strlen(vmarker);  //字符串长度为8,字符串取入第一行末尾回车符’
    ‘
    cout<<"lenth of vmarker:"<<strLenth<<endl; //8 printf("%s",vmarker); //输出字符串"endloop ",由于最后一个字符为' ',执行回车换行 printf("%c ",fgetc(file)); //获取并输出test.txt文件第二行开头字符'e' fclose(file); }

     

  • 相关阅读:
    使用ajax和history.pushState无刷新改变页面URL
    转:js-sdk探索之微信网页分享
    DOM操作优化
    转:jQuery插件开发精品教程,让你的jQuery提升一个台阶
    转:关于垂直网格与CSS基线对其的探讨
    伪元素控制网页表单样式
    div模拟textarea
    给独立程序员の建议
    ReactiveCocoa / RxSwift 笔记一
    ReactiveCocoa 浅析
  • 原文地址:https://www.cnblogs.com/vranger/p/3753186.html
Copyright © 2011-2022 走看看