c语言 高手赐教
void modify()
{
int m,k=0;
long offset;
char namekey[8];
struct person one;
printf("\
请输入姓名:");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
/1
{
printf("\
不能打开通讯录!");
exit();
}
while(!feof(fp))
/2
{
offset=ftell(fp);
/3
fscanf(fp,"%s%s%s\
",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\
已查到,记录为:");
printf("\
%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\
请输入新姓名、电话号码及住址:");
scanf("%s%s%s",one.name,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);
/4
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%-50s\
",one.name,one.tel,one.addr);
}
else
printf("\
对不起,通讯录中没有此人的记录。");
fclose(fp);
}
能帮我解释一下以上加了数字的语句吗?
谢谢了 !
答案:1. 代码的含义是打开指定路径的文件,将其赋值给fp,如果fp为空则文件不存在。
fopen的第一个参数的表用的是文件的路径
第二个参数则代表着流形态,其中有以下几种状态:
r 打开只读文件,该文件必须存在。
r+ 打开可读写的文件,该文件必须存在。
rb+ 读写打开一个二进制文件,只允许读写数据。
rt+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
2.(!feof(fp))是为了判断文件是否读取完毕。
3.offset=ftell(fp); 是为了得到当前记录与文件开始的位置的偏移量。函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数
4.fseek(fp,offset,SEEK_SET); 当查找到记录的时候,需要将其定位到查找的记录来进行修改,这句代码的含义就是定位从开始位置,偏移量为offset的位置。
int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:
SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
上一个:C语言编程问题
下一个:C语言的难度系数高么?