实验十三 文件程序设计
【实验目的】
1.掌握文件的基本概念。
2.掌握文本文件的打开和关闭操作。 3.掌握文本文件的顺序读写方法。
【实验内容】
13-1调试示例
从键盘输入一行字符,写到文件a.txt中。 源程序(有错误的程序)error13_1.cpp #include
char ch; FILE fp;
if((fp = fopen(\
printf(\ exit(0);
}
while((ch = getchar()) !='\\n' ) /* 调试时设置断点 */ fputc(ch, fp); fclose(fp);
} /* 调试时设置断点 */
运行结果(改正后程序的运行结果) 高等院校
(1)输入并保存上述程序后,编译程序,出现以下错误信息:
binary '=' : no operator defined which takes a right-hand operand of type 'struct _iobuf *' (or there is no acceptable conversion)
'fputc' : cannot convert parameter 2 from 'struct _iobuf' to 'struct _iobuf *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
'fclose' : cannot convert parameter 1 from 'struct _iobuf' to 'struct _iobuf *'
双击第一个出错信息,箭头指向fopen所在行,指出fp不是指针,而函数fopen()的类型是指针,赋值号两侧运算符的类型不匹配。双击第二个出错信息,箭头指向fputc所在行,指出fp不是指针,而函数fputc()要求参数fp为指针。分析以上出错信息,都由错误定义文件引起。
(2)将FILE fp;改为FILE *fp; 后,重新编译和连接,没有出现错误信息。 (3)调试程序开始,设置2个断点,具体位置见源程序的注释。
(4)单击(go),程序没有运行到第一个断点,而是运行结束。说明判断文件打开是否
正确的表达式写错了,仔细分析发现把 == 误写成了 !=。
(5)找出问题后,把 != 改为 == 后,重新编译和连接,没有错误和警告。 (6)再单击(7)再单击
(go),程序运行到第一个断点,说明文件打开正确。 (go),输入“高等院校”,程序运行到第二个断点。
(8)打开文件D:\\3050888\\a.txt,发现文件的内容是“高等院校”,符合题目的要求。 (10)单击13-2编程
统计一个文本文件中字母、数字及其他字符各有多少个,试编写相应程序。 13-3编程
从键盘输入一系列实数(以特殊数值-1结束),分别写到一个文本文件中。 13-4编程
写一个程序以比较两个文本文件的内容是否相同,并输出两文件内容首次不同的行号和字符位置。
13-5改错
文件Int_Data.dat中存放了若干整数,将文件中所有数据相加,并把累加和写入该文件的最后。
输入输出示例(没有键盘输入和屏幕输出): (1)文件Int_Data.dat中的初始数据: 10 15 20 50 100 200 220 280 300
(2)程序运行后,文件Int_Data.dat中的数据: 10 15 20 50 100 200 220 280 300 1195 源程序(有错误的程序)error13_5.cpp #include
FILE fp; int n,sum; }
while(fscanf(fp,\
sum=sum+n; fprintf(fp,\ fclose(fp); } 提示:
(1)在运行程序前,读者应该首先建立文件Int_Data.dat。
(Stop Debugging (Shaft F5)),程序调试结束。
if((fp=fopen(\
printf(\ exit(0);
(2)运行程序时,不需要从键盘输入数据,也没有屏幕输出。 (3)程序运行后,读者再打开文件Int_Data.dat,检查数据是否正确。
(4)每次运行程序,都会将文件Int_Data.dat中所有数据的累加和写入该文件的最后,由于读写操作针对同一个文件Int_Data.dat,故每次运行的结果都不同。
【实验报告要求】
将编程题(13-2~13-4)的程序流程图、源程序、运行结果和改错题(13-5)改正后的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,写在实验报告上。