文件字符读写函数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); }

 

原文地址:https://www.cnblogs.com/vranger/p/3753186.html