C语言中文件的输入输出

文件的读写 

一.fputc函数和fgetc()函数(putc函数和getc()函数) 

  1.fputc函数 

    把一个字符写到磁盘文件上去,调用形式: 

fputc(ch,fp);成功输出字符,失败EOF(-1) 

   2.fgetc函数 

   读入一个字符,该文件必须是以读或以读写方式打开的

   调用形式: ch=fgetc(fp); 

   while(ch!=EOF) 
   读入字符时,遇到结束符EOF(-1),读取结束,但是有些  

二进制数的值正好是-1,就被当作结束符处理,所以提供了 

一个feof(fp)来判断是否结束 

二.fread函数和fwrite函数 

   用来读取一组数据,调用形式如下: 

   fread(buffer,size,count,fp); 

   fwrite(buffer,size,count,fp); 

   buffer:是一个指针,对于fread来说,它是读入一个数 

据的存放地址,对fwrite来说,是输出一个数的存放地址 

   size:要读写的字节数 

   count:要进行读写多少个size字节的数据项 

三.fprintf和fscanf函数 

   调用格式: 

   fprintf(文件指针,格式字符串,输出表列); 

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

   用fprintf()和fscanf()函数对磁盘文件的读写,使用方 

便,容易理解,但是在输入时要进行ASCII码转换到二进制 

形式,输出时将二进制转换成ASCII码,花费时间较多,所 

以在内存与磁盘频繁交换的时候,最好不要用这两个函数 

四.fputs和fgets函数 

  fgets是从指定文件读入一个字符串 

  fputs是向指定文件输入一个字符串 

  形式如下: 

  fgets(str,n,fp); 

  fputs(str,fp); 


文件定位 

1.rewind函数 

  使位置指针重新返回文件的开头,此函数没有返回值 

  调用格式: 

  rewind(fp); 

2.fseek函数 

  可以实现改变文件的位置 

  fseek(文件类型指针,位移量,起始点); 

  位移量要求是long型的数据,所以位移数字末尾要加L 

  文件开始      SEEK_SET       0 
  文件当前位置  SEEK_CUR       1 
  文件末尾      SEEK_END       2 

  如:fseek(fp,100L,0);一般用于二进制文件 

3.ftell函数 

得到流式文件中当前位置,如果出错返回-1 


出错检验 

1.ferror函数 

ferror(fp); 

在调用输入输出函数时,如果出现错误,除返回值有反应外 

,还可以用ferror函数检查,ferror返回0表示没有出错, 

返回非0,表示出错 

每次调用输入输出函数都会产生一个新的ferror函数值,素 

以每次调用输入输出后,立即检查ferror函数值,否则信息 

丢失 

在执行fopen函数时,ferror函数初始值自动设置成0 

2.clearerr函数 

作用是使文件错误标志和文件结束标志置0 

假如调用输入输出函数时出错,调用clearerr(fp) 

后,ferror(fp)的值变成0,只要出现错误标志,就一直保留 

,直到对同一个文件调用clearerr函数或者rewind函数或热 

河一个输入输出函数 

下面是一个例子来说明 

#include <stdio.h> 

struct test { 

char stu[20]; 
int age; 
}stu[2],stu1[2]; 

//fputc的用法 
void putcTest() { 

FILE *fp; 
char ch; 

if ((fp=fopen("c:\\1.txt","a")) == NULL)  { 

printf("file cannot open\n"); 

return; 


ch=getchar(); 

while (ch!='#') { 

putc(ch,fp); 
putchar(ch); 
ch=getchar(); 


fclose(fp); 


//getc的用法 
void getcTest() { 

FILE *fp; 
char ch; 

if ((fp=fopen("c:\\1.txt","r+")) == NULL) { 

printf("cannot open file"); 

return ; 


ch=getc(fp); 

while(!feof(fp)){ 
putchar(ch); 
ch=getc(fp); 

putchar(10); 
fclose(fp); 


//fwrite和fread的用法 



void fwriteread(){ 
FILE *fp; 
int i; 
if((fp=fopen("c:\\1.txt","w+"))==NULL){ 
printf("cannot open file\n"); 
return; 

printf("输入两个学生的信息形如(cuijiantao,23)\n"); 
for(i=0;i<2;i++){ 
/// 
//当输入字符串的时候,后边要用空格和后边的隔开,否则会出现不可估量的错误 
scanf("%s %d",stu[i].stu,&stu[i].age);/// 
/// 
fwrite(&stu[i],sizeof(test),1,fp); 


rewind(fp); 
for(i=0;i<2;i++){ 
fread(&stu1[i],sizeof(test),1,fp); 
printf("%s %d\n",stu1[i].stu,stu1[i].age); 


fclose(fp); 


//fprintf()和fscanf()函数的用法以及fputs() 和fgets()的用法 
/用fprintf()和fscanf()函数对磁盘文件的读写,使用方便,容易理解, 
//但是在输入时要进行ASCII码转换到二进制形式,输出时将二进制转换成ASCII码,花费时间较多 
//所以在内存与磁盘频繁交换的时候,最好不要用这两个函数 
void printfscanfTest(){ 
FILE *fp; 
int i=3; 
int j; 
char s[100]; 
if((fp=fopen("c:\\1.txt","w+"))==NULL){ 
printf("cannot open file"); 

fputs("sdfasdf",fp); 
    //fprintf(fp,"%d",i); 
rewind(fp); 

    //fscanf(fp,"%d",&j); 
fgets(s,10,fp); 
//printf("%d",j); 
printf("%s\n",s); 
fclose(fp); 

void main(){ 
printfscanfTest(); 


原文地址:http://richling.iteye.com/blog/618337

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值