9.知识点:fopen()函数和fclose()函数
(1)fopen函数
l 调用方式:fp=fopen(“file1”,”r”);
l 使用文件方式:如”r”只读打开一个文本文;”w”只写打开或建立一个文本文件;”a”追加打开一个文本文件,在文件末尾添加数据。
例1:(2011-03-40)设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是(B)
A)写操作结束后可以从头开始读 B)只能写不能读
C)可以在原有内容后追加写 D)可以随意读和写
【解析】文件打开方式,‘w’只能向该文件写入,如打开的文件不存在则以指定的文件名建立文件,如存在,则先删除再重建一个文件。故选B。
l 若不能实现打开任务,fopen函数将带回一个空指针值NULL。
例1:(2009-04-13)以下程序用来判断指定文件是否能正常打开,请填空。
#include <stdio.h>
main()
{FILE *fp;
if(((fp=fopen(“test.txt”,”r”))== NULL ))
printf(“未能打开文件!n);
else
printf(“文件打开成功!n”);
}
【解析】考查文件打开操作。打开文件使用fopen函数,正常打开时返回指向该文件的文件指针,否则返回值为NULL;题目中当if条件表达式成立时,输出“未能打开文件!”,故fopen函数返回值为NULL。正确答案:NULL。
(2)fclose()函数
l 调用方式:fclose(fp);
l 顺利完成关闭操作,返回值为0,否则返回EOF(-1)。
10.知识点:fputc()函数和fgetc()函数
l fgetc()函数的调用形式:ch=fgetc(fp);从打开的文件fp中读取一个字符。
l fputc()函数的调用形式:fputc(ch,fp);将字符输出到fp所指向的文件中去。
11.知识点:fread()函数和fwrite()函数
l fread()函数的调用形式:fread(buffer,size,count,fp);其中buffer是一个指针,size是每个数据块的字节数,count是每次读入数据块的个数,fp是文件指针。
例1:structstud
{char name[10];
int num;
}stu[40];
假设学生的数据已存放在磁盘文件中,如何读入40个学生的数据?
for(i=0;i<40;i++)
fread( &stu[i] , sizeof(struct stur) ,1,fp);
l fwrite()函数的调用形式:fread(buffer,size,count,fp);其中buffer是输出数据的首地址。
12.知识点:fscanf()函数和fprintf()函数
l fscanf(文件指针,格式控制字符串,输入列表);
l fprintf(文件指针,格式控制字符串,输出列表);
例1:(2011-09-40)有以下程序
#include<stdio.h>
main()
{FILE *fp;
int k,n,i,a[6]={1,2,3,4,5,6};
fp=fopen(“d2.dat”,”w”);
for(i=0;i<6;i++)fprintf(fp,”%dn”,a[i]);
fclose(fp);
fp=fopen(“d2.dat”,”r”);
for(i=0;i<3;i++) fscanf(fp,”%d%d”,&k,&n);
fclose(fp);
printf(“%d,%dn”,k,n);
}程序运行后的输出结果是 (C)
A.1,2 B.3,4 C.5,6 D.123,456
【解析】第一次fp=fopen(“d2.dat”,”w”);以写方式打开,通过循环将a数组全部写入文件中,并且每行写一个;第二次fp=fopen(“d2.dat”,”r”); 以写方式打开,然后通过循环每次读取两个数字给k和n,第三次k和n分别得到5和6
例1:(2009-04-40)有以下程序
#include <stdio.h>
main()
{FILE *f;
f=fopen(“filea.txt”,”w”);
fprintf(f,”abc”);
fclose(f);
}若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt的内容为(C)
A)helloabc B)abclo C)abc D)abchello
【解析】程序中定义了一个文件指针,然后用fopen()函数,以写的方式打开文件“filea.txt”,并让指针f指向它,执着调用fprintf()函数,将“abc”写到指针所指向的文件中。由于filea.txt里原来的内容”hello”被”abc”覆盖掉,所以文件“filea.txt”里,最后的内容为”abc”,本题答案选C。
13.知识点:fgets()函数和fputs()函数
l fgets(str,n,fp);从fp指向的文件输入n-1个字符,在最后加一个’ ’,得到字符串共有n个字符,把它们放到字符数组str中。
l fputs(“China”,fp);把字符串”China”输出到fp指向的文件,字符串末尾’ ’不输出。
(2010-03-40)有以下程序
#include <stdio.h>
main()
{FILE *fp;char str[10];
fp=fopen(“myfile.dat”,”w”);
fputs(“abc”,fp);fclose(fp);
fp=fopen(“myfile,data”,”a+”);
fprintf(fp,”%d”,28);
rewind(fp);
fscanf(fp,”%s”,str);puts(str);
fclose(fp);
}程序运行后的输出结果是(C)
A)abc B)28c C)abc28 D)因类型不一致而出错
【解析】以“a+”方式打开一个已存在的文件,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作。fputs(“abc”,fp);把字符串”abc”输出到fp指向的文件。
14.知识点:rewind()函数
l 调用形式:rewind(fp);
l 功能:使位置指针重新返回文件的开头。
15.知识点:fseek()函数
l 功能:改变文件的位置指针
l 调用形式:fseek(fp,100L,0);将位置指针移到离文件头100个字节处。
l 文件首 SEEK_SET 0 文件当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
16.知识点:ftell()函数
l ftell(fp);
l 功能:得到流式文件中的当前位置。
17.知识点:feof()函数
l feof(fp);
l 判断文件是否结束,结束,返回值为1,否则为0。
例1(2011-03-15)以下程序运行后的输出结果是 【15】 。
main()
{ FILE *fp; int x[6]={1,2,3,4,5,6},i;
fp=fopen("test.dat","wb");
fwrite(x,sizeof(int),3,fp);
rewind(fp);
fread(x,sizeof(int),3,fp);
for(i=0;i<6;i++)printf("%d",x[i]);
printf("n");
fclose(fp);
}
答案:123456
【解析】fwrite(x,sizeof(int),3,fp);将数组内的前三个元素即1,2,3输出到文件中去,rewind(fp);文件回到开头,fread(x,sizeof(int),3,fp);将文件的内容读出并存到x数组的前三个元素中,把1,2,3写到数组的前三个元素中去,所有数组中的元素值均没变。
看过“二级c语言公共知识点“的人还看了: