C语言编程初体验 作文,C语言作文件操常用代码

本文详细介绍了C语言中文件的打开、关闭、读取、写入及定位操作,包括fopen、fclose、fputc、fgetc、fread、fwrite、fprintf、fscanf、fgets、fputs等函数的使用,以及文件定位的rewind、fseek和ftell函数。通过实例展示了如何进行文件的读写、拷贝和格式化输入输出,以及错误检测和文件定位。
摘要由CSDN通过智能技术生成

打开文件fopen

函数原型: FILE *fopen(char *name,char *mode)

功能:按指定方式打开文件

返值:正常打开,为指向文件结构体的指针;打开失败,为NULL

文件关闭fclose

函数原型:int fclose(FILE *fp)

功能:关闭fp指向的文件

返值:正常关闭为0;出错时,非0

//

文件读取方式

//方法一

FILE *fp; //定义一个文件类型指针

fp=fopen("aa.c","w"); //打开一个文件 打开方式为w(只写.文本文件) aa.c为相对路径

if(fp==NULL) //判断文件打开是否成功

{

printf("File open error!\n");

exit(0); //终止程序 区别于return

}

//方法二

FILE *fp;

fp= fopen ("c:\\fengyi\\bkc\\test.dat","r"); //绝对路径 打开方式为r(只读.文本文件)

//方法三

FILE *fp;

char *filename="c:\\fengyi\\bkc\\test.dat"

fp= fopen(filename,”r”);

//

fputc与fgetc

fputc:

函数原型:int fputc(int c,FILE *fp)

功能:把一字节代码c写入fp指向的文件中

返值:正常,返回c;出错,为EOF

fgetc

函数原型:int fgetc(FILE *fp)

功能:从fp指向的文件中读取一字节代码

返值:正常,返回读到的代码值;读到文件尾或出错,为EOF

//

从键盘输入字符,逐个存到磁盘文件中,直到输入“#”为止

#include

int main()

{

FILE *fp;

char ch,*filename="out.txt";

if((fp=fopen(filename,"w"))==NULL) //打开文件失败

{

printf("cannot open file\n");

exit(0);

}

printf("Please input string:");

ch=getchar();

while(ch!='#')

{

fputc(ch,fp);

putchar(ch);

ch=getchar();

}

fclose(fp); //操作完后一定要关闭文件,一面数据丢失

return 0;

}

//

读文本文件内容,并显示

#include

int main()

{

FILE *fp;

char ch,"r"))==NULL)

{

printf("cannot open file\n");

exit(0);

}

while((ch=fgetc(fp))!=EOF)

putchar(ch);

fclose(fp);

return 0;

}

//

文件拷贝

#include

int main()

{

FILE *in,*out;

char ch,infile[10],outfile[10];

scanf("%s",infile);

scanf("%s",outfile);

if ((in = fopen(infile,"r"))== NULL)

{

printf("Cannot open infile.\n");

exit(0);

}

if ((out = fopen(outfile,"w"))== NULL)

{

printf("Cannot open outfile.\n");

exit(0);

}

while (!feof(in))

fputc(fgetc(in),out); //fgetc(in)返回一个字符光标向下移动一位,fputc(ch,fp)将字符输入到fp指向文件中光标始终留在最后;

fclose(in);

fclose(out);

return 0;

}

//

数据块的输入输出:fread与fwrite 返值:成功,返回读/写的块数;出错或文件尾,返回0

//

float f[2];

FILE *fp;

fp=fopen("aa.dat","rb");

fread(f,4,2,fp);

//

for(i=0;i<2;i++)

fread(&f[i],1,fp);

//

struct student

{ int num;

char name[20];

char sex;

int age;

float score[3];

}stud[10];

for(i=0;i<10;i++)

fread(&stud[i],sizeof(struct student),fp);

//

从键盘输入4个学生数据,把他们转存到磁盘文件中去

#include

#define SIZE 4

struct student_type

{ char name[10];

int num;

int age;

char addr[15];

}stud[SIZE];

int main()

{

int i;

for(i=0;i

scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);

save();

display();

return 0;

}

void display()

{ FILE *fp;

int i;

if((fp=fopen("d:\\fengyi\\exe\\stu_dat","rb"))==NULL)

{

printf("cannot open file\n");

return;

}

for(i=0;i

{

fread(&stud[i],sizeof(struct student_type),fp);

printf("%-10s %4d %4d %-15s\n",stud[i].num,stud[i].age,stud[i].addr);

}

fclose(fp);

}

void save()

{ FILE *fp;

int i;

if((fp=fopen("d:\\fengyi\\exe\\stu_dat","wb"))==NULL)

{

printf("cannot open file\n");

return;

}

for(i=0;i

if(fwrite(&stud[i],fp)!=1)

printf("file write error\n");

fclose(fp);

}

//

格式化I/O:fprintf与fscanf 返值:成功,返回I/O的个数;出错或文件尾,返回EOF

//

fprintf(fp,"%d,%6.2f",i,t); //将i和t按%d,%6.2f格式输出到fp文件

fscanf(fp,%f",&i,&t); //若文件中有3,4.5,则将3送入i,4.5送入t

//

从键盘按格式输入数据存到磁盘文件中去

#include

int main()

{

char s[80],c[80];

int a,b;

FILE *fp;

if((fp=fopen("test","w"))==NULL)

{

puts("can't open file");

exit() ;

}

fscanf(stdin,"%s%d",s,&a);/*read from keaboard*/

fprintf(fp,"%s %d",a);/*write to file*/

fclose(fp);

if((fp=fopen("test","r"))==NULL)

{

puts("can't open file");

exit();

}

fscanf(fp,c,&b);/*read from file*/

fprintf(stdout,"%s %d",b);/*print to screen*/

fclose(fp);

return 0;

}

//

字符串I/O: fgets与fputs

返值:

fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULL

fputs正常时返回写入的最后一个字符;出错为EOF

//

从键盘读入字符串存入文件,再从文件读回显示

#include

int main()

{

FILE *fp;

char string[81];

if((fp=fopen("file.txt","w"))==NULL)

{

printf("cann't open file");

exit(0);

}

while(strlen(gets(string))>0)

{ fputs(string,fp);

fputs("\n",fp);

}

fclose(fp);

if((fp=fopen("file.txt","r"))==NULL)

{

printf("cann't open file");

exit(0);

}

while(fgets(string,81,fp)!=NULL)

fputs(string,stdout);

fclose(fp);

return 0;

}

文件的定位

rewind函数

函数原型: void rewind(FILE *fp)

功能:重置文件位置指针到文件开头

反值:无

//

对一个磁盘文件进行显示和复制两次操作

#include

int main()

{

FILE *fp1,*fp2;

fp1=fopen("d:\\fengyi\\bkc\\ch12_4.c","r");

fp2=fopen("d:\\fengyi\\bkc\\ch12_41.c","w");

while(!feof(fp1))

putchar(getc(fp1));

rewind(fp1);

while(!feof(fp1))

putc(getc(fp1),fp2);

fclose(fp1);

fclose(fp2);

return 0;

}

//

fseek函数

函数原型: int fseek(FILE *fp,long offset,int whence)

功能:改变文件位置指针的位置

返值:成功,返回0;失败,返回非0值

offset:

位移量(以起始点为基点,移动的字节数)

>0 向后移动

<0 向前移动

whence:

起始点

文件开始 SEEK_SET 0

文件当前位置 SEEK_CUR 1

文件末尾 SEEK_END 2

ftell函数

函数原型: long ftell(FILE *fp)

功能:返回位置指针当前位置(用相对文件开头的位移量表示)

返值:成功,返回当前位置指针位置;失败,返回-1L,

//

磁盘文件上有3个学生数据,要求读入第1,3学生数据并显示

#include

struct student_type

{ int num;

char name[10];

int age;

char addr[15];

}stud[3];

int main()

{

int i;

FILE *fp;

if((fp=fopen("studat","rb"))==NULL)

{

printf("can't open file\n");

exit(0);

}

for(i=0;i<3;i+=2)

{

fseek(fp,i*sizeof(struct student_type),0);

fread(&stud[i],fp);

printf("%s %d %d %s\n",stud[i].addr);

}

fclose(fp);

return 0;

}

//

求文件长度(ch12_101.c)

#include"stdio.h"

int main()

{

FILE *fp;

char filename[80];

long length;

gets(filename);

fp=fopen(filename,"rb");

if(fp==NULL)

printf("file not found!\n");

else

{

fseek(fp,0L,SEEK_END);

length=ftell(fp);

printf("Length of File is %1d bytes\n",length);

fclose(fp);

}

return 0;

}

///

出错的检测

ferror函数

函数原型: int ferror(FILE *fp)

功能:测试文件是否出现错误

返值:未出错,0;出错,非0

说明

每次调用文件输入输出函数,均产生一个新的ferror函数值,所以应及时测试

fopen打开文件时,ferror函数初值自动置为0

clearerr函数

函数原型: void clearerr(FILE *fp)

功能:使文件错误标志置为0

返值:无

说明:出错后,错误标志一直保留,直到对同一文件调clearerr(fp)或rewind或任何其它一个输入输出函数

//

ferror()与clearerr()举例

#include

int main(void)

{

FILE *stream;

stream = fopen("DUMMY.FIL","w");

getc(stream);

if (ferror(stream))

{

printf("Error reading from DUMMY.FIL\n");

clearerr(stream);

}

if(!ferror(stream))

printf("Error indicator cleared!");

fclose(stream);

return 0;

}

aa46fec59d7e1381c367a82e3cd97b4a.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值