【项目任务】
向一个磁盘文件中写入若干数据。
【设计思路】
以写的方式打开一个磁盘文件;从键盘上读数据,直到“#”号结束,将每次读出的数据利用fputc( )函数写到文件中;最后关闭文件。
【程序代码】
#include <stdio.h>
main()
{
FILE *fp; /*定义一个文件指针*/
char ch;
if((fp=fopen("c:\\out.dat","w"))==NULL) /*以写的方式打开一个文件*/
{
printf("Can’t open the file.\n");
exit(0); /*打开失败后,退出*/
}
while((ch=getchar())!='#') /*从键盘上读数据,直到“#”号结束*/
{
fputc(ch,fp); /*用fputc()函数将数据写到文件*/
}
fclose(fp); /*关闭文件*/
}
【运行结果】
从键盘上输入:ABC#
c盘中的文件out.dat中的内容为ABC
【知识拓展】
在本案例中,要理解以下几个方面:
1.什么是文件?文件就是指存储在外部介质上的数据集合,它可以分为文本文件和二进制文件。文本文件的每个字节存放一个ASCII代码,代表一个字符,占用存储空间多,便于输出字符;二进制文件将数据按其在内存中的存储形式输出到磁盘上存放,占用存储空间少,不能直接输出字符。
2.什么是文件指针?每个被使用的文件都在内存中开辟一个存储块,用来存放文件的相关信息。这些信息保存在一个结构体变量中,该结构体类型取名FILE。这样,即可定义一个指针,用来指向存放被打开文件相关信息的内存区域地址,从而能访问该文件的相关信息。定义文件指针变量的形式为FILE *fp;。
3.ropen( )函数用来打开文件,此函数返回值为文件指针类型,NULL(该值在stdio.h中有定义)代表打开文件失败或发生错误。在编程过程中,一定要检查打开文件是否成功。
4.rclose( )函数用来关闭已经打开的文件,此函数返回值为整型,0表示成功,-1或EOF表示失败。在编程过程中,应该养成在程序终止前关闭文件的习惯,否则可能会造成数据的丢失。
5.文件的打开方式有很多种,如表11-1所示。
表11-1 文件的打开方式
打开方式 |
具体含义 |
"r" |
只读打开一个文本文件,只允许读数据 |
"w" |
只写打开或建立一个文本文件,只允许写数据 |
"a" |
追加打开一个文本文件,并在文件末尾写数据 |
"rb" |
只读打开一个二进制文件,只允许读数据 |
"wb" |
只写打开或建立一个二进制文件,只允许写数据 |
"ab" |
追加打开一个二进制文件,并在文件末尾写数据 |
"r+" |
读写打开一个文本文件,允许读和写 |
"w+" |
读写打开或建立一个文本文件,允许读写 |
"a+" |
读写打开一个文本文件,允许读,或在文件末追加数据 |
"rb+" |
读写打开一个二进制文件,允许读和写 |
"wb+" |
读写打开或建立一个二进制文件,允许读和写 |
"ab+" |
读写打开一个二进制文件,允许读,或在文件末追加数据 |
【项目任务】
从一个磁盘文件中读出若干数据。
【设计思路】
以读的方式打开一个磁盘文件;从文件上读数据,并将其写到计算机屏幕上,直到读完为止;最后关闭文件,从文件中读数据。
【程序代码】
#include <stdio.h>
main()
{
FILE *fp;
char ch;
if((fp=fopen("c:\\in.dat","r"))==NULL) /*以写的方式打开一个文件*/
{
printf("Can’t open this file.\n");
exit(0); /*打开失败后,退出*/
}
while((ch=fgetc(fp))!=EOF) /*判断文件是否结束*/
{
putchar(ch);
}
fclose(fp);
}
【运行结果】
文件in.dat中:
ABC
屏幕上显示:
ABC
【知识拓展】
1.在执行fgetc()函数读字符时,如果遇到文件结束符,则函数会返回一个文件结束标志EOF(其值为-1,在stdio.h中有定义),这是针对于文本文件。如果是二进制文件,可以使用feof()函数来进行测试,如果函数返回值为真,则表示文件结束;函数返回值为假,则表示文件没有结束。
2.在向计算机中输入文本文件时,将回车、换行符转换为换行符;在输出时,将换行符转换为回车符和换行符。在用二进制文件时,不进行这种转换。
3.以下是常见的文件读写函数,读者可以自行查阅TC 2.0的帮助手册,了解它们的用法。
· fgetc( )和fputc( ),用来处理字符数据。
ch=fgetc(fp);
fputc(ch,fp);
· fgets( )和fputs( ),用来处理字符串数据。
fgets(str,n,fp);
fputs("Hello",fp);
· fread( )和fwrite( ),一般用于二进制文件中数据的输入/输出。
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
· 输入时,要将ASCII码转换为二进制形式;输出时,又要将二进制转换成字符。
fprintf(fp,…); 如fprintf(fp,"%d",100);
fscanf(fp,…); 如fscanf(fp,"%d",&x);