C/C++的文件读写操作

文件读写是经常用到的,在C/C++中关于文件读写的函数也很毒,最近在使用文件读写的时候就发现一些问题,总结一下:

1.    fgetc(); 函数原型是:int fgetc( FILE *stream );

该函数每一次从文件中读取一个字符,对于空格和回车都可以读取!

Source.txt 文件内容为“thank you very much

验证程序如下:

#include<iostream>

#include<fstream>

#include<string>

using namespace std;

int main()

{

   FILE *infile;            //连接source.txt的文件指针

   FILE *outfile;           //连接result.txt的文件指针

  if((infile=fopen("source.txt","r"))==NULL)

  { 

     cout<<"Failed to open file source.txt!  Press any key to continue!"<<endl;

     getchar();

     exit(1);

  }

 

  if((outfile=fopen("result.txt","w"))==NULL)

  { 

     cout<<"Failed to open file result.txt! Press any key to continue!"<<endl;

     getchar();

     exit(1);

  }

  char str[1024];

  int i=0;

int M=0;

  while(!feof(infile))

  {  

str[i++]= fgetc(infile);

  }

  cout<<"I:="<<i<<endl;

      return 0;

}

程序执行以后输出:I= 20;

本来是19个字符,输出是20,原因是在读文件的时候,整个文件作为string调进内存中,最后一个“/0”标示string的结尾,所以fgetc()把“/0”也读了进来!

如果在上述source.txt文件的末尾敲一下回车键,再运行程序输出I=21;其中包括回车键。所以21

 

2.   fputc();该函数的原型是int fputs( const char *string, FILE *stream );

其功能是把指定字符写入到文件中;

和函数fgetc()相对应的使用!

 

3.   fscanf();该函数原型为:int fscanf( FILE *stream, const char *format [, argument ]... );

是格式化的读文件函数,

fprintf();该函数的原型为:int fprintf( FILE *stream, const char *format [, argument ]... );

是格式化的写文件函数;

测试程序代码为:

while(!feof(infile))

{ 

    fscanf(infile,"%c",str);

    fprintf(outfile,"%c",str);

}

4.       fgets();该函数原型为:char *fgets( char *string, int n, FILE *stream );

可以理解为逐行读文件的函数,遇到回车键则返回,并丢弃回车键符号;将读取的整行内容作为一个string存储到char*string的内存中。

fputs();该函数原型为:   int fputs( const char *string, FILE *stream );

string指向的内容以字符串的形式一下写进文件中;

 

5.   getline()函数;有关该函数详细说明如下:

#include <iostream>

#include <fstream>

#include <string>

using namespace std; //输出空行
void OutPutAnEmptyLine()
{

           cout<<"/n";

}

//读取方式逐词读取词之间用空格区分

void ReadDataFromFileWBW()
{

         ifstream fin("data.txt");  

         string s;  

       while( fin >> s ) 

     {    

   cout << "Read from file: " << s << endl;    

      }

}

 

 

//读取方式逐行读取将行读入字符数组行之间用回车换行区分

 

   {  

   ifstream fin("data.txt");     

const int LINE_LENGTH = 100;     

char str[LINE_LENGTH];      

while( fin.getline(str,LINE_LENGTH) )    

{            

cout << "Read from file: " << str << endl;   

}

 

}

//读取方式逐行读取将行读入字符串行之间用回车换行区分

void ReadDataFromFileLBLIntoString()
{    ifstream fin("data.txt");  

     string s;      

while( getline(fin,s) )   

 {            

cout << "Read from file: " << s << endl;    

  }

}

 

int main()

{

  //  此处省略验证代码!

      Return 0;

}

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值