从键盘输入3个学生的有关数据,然后把它们转存到磁盘文件上。

解题思路:
我们先审题,题目中说从键盘上输入学生的有关数据,我们就用scanf函数来对学生的有关信息进行输入,然后定义一个input函数来实现这个功能,接下来题目中说到要把它们转存到磁盘文件上;那么,这时候我们需要从键盘上读取所输入的信息到磁盘文件上,然后对它进行保存。readfile函数就是实现了读取功能,具体是怎样实现的呢,就是通过定一个指向文件的指针变量p,来判断文件是否存在,并用fread函数来读取数据块,读一行数据,就向磁盘文件中输入一行数据;然后save函数主要就是判断我们输出文件是否存在,若存在,则说明保存成功。

C标准允许用fread函数从文件中读取一个数据块,用fwrite函数向文件中写一个数据块。
一般调用形式如下:

fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);

其中buffer是一个地址,在fread函数中它是读入数据的存放地址,在fwrite函数中,它是输出数据的地址;size是要读写的字节数;count是要读取多少个size字节;fp就是文件型指针。

本题具体实现代码如下:

#include "stdafx.h"
#include
#define N 3

struct student
{
	char name[10];
	int num;
	int age;
}stud[N];//定义全局结构体数组stud,包含3个学生数据

//对所要调用的函数进行声明
void input();
void save();
void readFile();
int _tmain(int argc, _TCHAR* argv[])
{
	printf("please input student's message:\n");
	input();
	save();
	readFile();
	return 0;
}
/*
 *函数名称:input()
 *函数功能:给stud数组中的数据赋值
 *返回值:void
*/ 
void input()
{
	for(int i=0;i<N;i++)
	{
		scanf("%s %d %d",&stud[i].name,&stud[i].num,&stud[i].age);
	}
	printf("\n");
}
/*
 *函数名称:readFile()
 *函数功能:从键盘上读取输入的学生数据
 *返回值:void
*/ 
void readFile()
{
	FILE *p;
	int i;
	if((p=fopen("stu_dat","rb"))==NULL)
	{
		printf("cannot open the file\n");
		return;
	}
	for(i=0; i<N; i++)
	{
		fread(&stud[i],sizeof(struct student),1,p);
		printf("%-10s %4d %4d\n",stud[i].name,stud[i].age,stud[i].num);
	}
	fclose(p);
	return;
}
/*
 *函数名称:save()
 *函数功能:向文件输出学生的数据
 *返回值:void
*/ 
void save()
{
	int i;
	FILE *p;
	if((p=fopen("stu_dat","wb"))==NULL)//打开输出文件
	{
		printf("cannot open file\n");
		return;
	}
	for(i=0;i<N;i++)
	{
		if(fwrite(&stud[i],sizeof(struct student),1,p)!=1)
		{
			printf("file write error\n");
		}		
	}	
	fclose(p);
}

运行结果:
从键盘输入3个学生的有关数据,然后把它们转存到磁盘文件上。_第1张图片

你可能感兴趣的:(从键盘输入3个学生的有关数据,然后把它们转存到磁盘文件上。)