C语言编新建什么文件,C语言新建文件,向文件中输入内容并读出文件内容

本文详细介绍了C语言中的文件操作函数,包括fscanf()和fprintf()的使用,以及getw()和putw()针对整型的读写,fgets()和fputs()用于字符串操作。同时,还提及了用户如何自定义函数以满足特定需求,以及常见文件操作错误的预防。通过实例演示了电话簿程序,展示了这些函数的实际应用。
摘要由CSDN通过智能技术生成

三、格式化读写函数--fscanf( )函数和fprint( )函数

调用方式分别是: fscanf(文件指针,格式字符串,输入表);

fscanf 函数将指针指向的文件内容,以格式符要求的形式,读入内存指定地址内 fprintf(文件指针,格式字符串,输出表);fprintf 函数是将内存指定地址内的内容,以格式符要求的形式,输出到指针指向的文件

说明: 以上两个函数与scanf( ) 和printf( )函数 只有一点不同:即前二者的读写对象是磁盘数据文件,即是文件指针指向的磁盘文件。 用fscanf( )和fprintf( )函数对磁盘文件 进行读写,使用方便,容易理解,但是,由于输入是要将ASCII码转换为二进制形式,输出时又要将二进制形式转换成字符,花费时间较多。因此,在内存与磁盘频繁交换数据的情况下,最好不用fscanf(

)和fprintf( )函数,而用fread和fwrite函数。

例:编制一个程序,建立一个电话簿,包括姓名和电话号码两项内容,该程序有增加新姓名和电话号码的功能,也可以根据姓名查询已经存入电话簿的电话号码。

程序在设计时将分别设计成三个函数:

1.菜单选项--menu( )

2.增加新电话号码--add-num( )

3.查询老电话号码--lookup( )。

#include "stdio.h"

void add_num( ),lookup( );

main( )

{ char choice;

do{choice=menu( );

switch(choice)

{ case ‘A‘:add_num( ); break;

case ‘L‘:lookup( ); break; }

}while(choice!=‘Q‘);

}

menu( )

{ char ch;

do{

printf("(A)dd,(L)ookup or (Q)uit:");

ch=tolower(getche( ));

printf("\n"); }

while(ch!=‘Q‘&&ch!=‘A‘&&ch!=‘L‘);

return ch;

}

void add_num( )

{ FILE * fp;

char name[80];

int a_code,exchg,num;

if((fp=fopen("phone","a"))==NULL)

{ printf("cannot open directory file\n"); exit(1); }

printf("enter name and number:");

fscanf(stdin,"%s%d%d%d",name,&a_code,&exchg,&num);

fscanf(stdin,"%*c");

fprintf(fp,"%s %d %d %d n",name,a_code,exchg,num);

fclose(fp);

}

void lookup( )

{ FILE *fp;

char name[80],name2[80];

int a_code,exchg,num;

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

{ printf("cannot open directory file\n"); exit(1); }

printf("name?");

gets(name);

while(!feof(fp))

{fscanf(fp,"%s%d%d%d",name2,&a_code,&exchg,&num);

if(!strcmp(name,name2))

{printf("%s: (%d)%d-%d\n",name,a_code,exchg,num); break; }

}

fclose(fp);

}

请运行程序,可以得到如下结果:

(A)dd,(L)ookup or (Q)uit:A Enter name and number: Liming 6789 1234 135

(A)dd,(L)ookup or (Q)uit:A Enter name and number: Lihung 5678 235 357

(A)dd,(L)ookup or (Q)uit:L name?Liming Liming:(6789)1234-135

(A)dd,(L)ookup or (Q)uit:Q

四、读入整型量函数--- getw( )函数和putw( )函数

调用方式如下例:

i=getw(fp);     它的作用是从磁盘文件读一个整数到内存,赋给整型变量i。

putw(10,fp);    它的作用是将整数10输出到fp指向的文件。

五、读写字符串函数-- fgets( )函数和fputs( )函数

调用方式分别为:

fgets(字符数组,n,fp);

fgets( )函数的作用是将fp指向的文件中(n-1)个字符读入字符数组,并且加结束符“\0”,若在(n-1) 个字符前遇到EOF或换行符,均结束读入。

fputs(字符数组,fp);

fputs( )函数的作用是向指定的文件输出一个字符串。如:fputs(“china”,fp);

说明:fgets( )和fputs( )函数与gets( )和puts( )函数的不同之处也在于:前二者的读写对象为指定的文件。

六、用户自定义读写函数

如果用户对于读写盘文件还有特殊的要求,或者是在某些C编译的库函数中,不包括前面所介绍的那些读写函数,用户也可以自己定义函数。

比如:定义getw函数

getw(fp)

{FILE *fp;

char *s; int i;

s=&i;

s[0]=getc(fp); s[1]=getc(fp);

return(i);

}

定义putw函数

putw(i,fp)

{int i;

FILE *fp;

{char *s;

s=&i;

putc(s[0],fp);putc(s[1],fp);

return(i);

}

七、常见的文件读、写错误

1. 使用文件时忘记打开文件。用后又忘记关闭文件,造成文件的数据丢失。

2. 混淆文件指针与文件读/写的位置指针的概念。

3. 不明确当前位置指针的位置,造成读/写错误。

4. 不能使文件正确定位。

5. 文件的打开与使用方式不匹配。

例如,对文件以只读方式打开,却对文件进行读写,请看程序:

if((fp=fopen(“test”,“r”))==NULL)

{printf(“cannot open this file\n”);

exit(1);

}

ch=fget(fp);

while(ch!=‘#’)

{ch=ch+4;

fputc(ch,fp);

ch=fget(fp);

}

以上程序段的“r”应改作“r+”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值