`
891633093
  • 浏览: 48777 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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();
}




1
0
分享到:
评论
2 楼 891633093 2010-03-18  
zhr_23 写道
lz,可以把C++的输入输出也总结一下!


等我复习到那的时候再说吧,呵呵
1 楼 zhr_23 2010-03-18  
lz,可以把C++的输入输出也总结一下!

相关推荐

Global site tag (gtag.js) - Google Analytics