当前位置:文档之家› 输入、输出流程序设计实验

输入、输出流程序设计实验

实验五输入、输出流程序设计实验
【实验目的】
1.理解输入/输出流相关概念
2.掌握输入/输出流的常用操作
3.理解文件概念
4.掌握文件流的常用操作
【实验内容】
2.打开指定的一个文本文件,在每一行前面加上行号。

(1.2题二选一)程序如下:
#include <stdio.h>
#include <string.h>
#define BUFF_SIZE 50
int main()
{
char file[256],buff[BUFF_SIZE+1];
FILE* fin = NULL;
int bL = 1;
int iLN = 0; // line number
printf("请输入需要处理的文件名路径:\n");
scanf("%s",file);
if (NULL == (fin = fopen(file,"r")))
{
printf("错误. \n");
return -1;
}
while (NULL != fgets(buff,BUFF_SIZE,fin))
{
if (bL) printf("%3d:%s",++iLN,buff);
else printf("%s",buff);
if (buff[strlen(buff)-1] == '\n') bL = 1;
else bL = 0;
}
fclose(fin);
}
运行结果:
3.编写程序,从键盘输入5个学生的学生信息,包括学号、姓名、3门课程的成绩,计算3门课的平均成绩,将全部信息以二进制方式保存到文件中。

程序如下:
#include <stdio.h>
#include <stdlib.h>
#define N 5
struct student
{
int num;
char name[10];
float score[3];
float aver;
}stu[N];
void save()
{
FILE *fp;
int i;
if((fp=fopen("stud","wb"))==NULL)
{
printf("cannot open the file stud!\n");
exit(0);
}
for(i=0;i<N;i++)
{
if((fwrite(&stu[i],sizeof(struct student),1,fp))!=1)
printf("flie write error!\n");
}
fclose(fp);
}
int main()
{
int i;
printf("请输入学号、姓名、三门课程成绩:\n");
for(i=0;i<N;i++)
{
scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].s core[2]);
stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;
}
save();
FILE *fp;
if((fp=fopen("stud","rb"))==NULL)
{
printf("cannot open the file stud!\n");
exit(0);
}
printf("the data:\n");
printf("num name score1 score2 score3 average\n");
for(i=0;i<N;i++)
{
fread(&stu[i],sizeof(struct student),1,fp);
printf("%-2d%5s%7.1f%7.1f%7.1f%7.1f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score [1],stu[i].score[2],stu[i].aver);
} //输出从文件中读取的数据在屏幕上以验证
fclose(fp);
return 0;
}
运行结果:
【思考题】
1.什么叫流?流的提取和插入指的是什么?
2.C++有哪4个预定义的流?它们分别与什么具体设备相关联?
3.标准输出与标准错误在输出方面有那些异同?
4.为什么在不为每个类型提供明确指示的情况下,cout仍能够显示不同的C++类型?
5.C++进行文件输入/输出的基本过程是什么?
6.C++中顺序文件和随机文件有什么区别?
1.
流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动,一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。

2.
C++中包含几个预定义的流对象,它们是标准输人流对象cin、标准输出流对象cout、非缓冲型的标准出错流对象cerr和缓冲型的标准出错流对象clog。

这4个流所关联的具体设备为:cin 与标准输人设备相关联,通常指键盘
cout 与标准输出设备相关联,通常指显示器
cerr 与标准错误输出设备相关联(非缓冲方式),通常指显示器
clog 与标准错误输出设备相关联(缓冲方式),通常指显示器
3.
标准错误句柄编号为2, 常用于输出错误信息,标准输出句柄编号为1, 常用于输出信息,其他都一样。

4.
ostream已经重载了各种基础类型的标准输出。

5.
CFile file("文件的具体路径名:",CFile::modeRead);
char buf[1024] = {0};
file.read(buf,1024);
基本过程就是这样的。

6.
数组在内存中是按顺序存放的,可以通过下标直接定位到某一个元素,这是随机存取,链表在内存中不是按顺序存放的,而是通过指针连在一起,为了访问某一元素,必须从链头开始顺着指针才能找到某一个元素,是顺序存取。

相关主题