关于从文件输入输出程序的问题
用fwrite和fread两个函数可以在一个程序中同时存在吗,就是我先创建一个文本文件,然后用fread读入程序,经过一番计算之后再把计算结果输出返回到文本文件,请简析
一下原因。
下面是我写的一个C的管理系统,目的是使用文件将学生信息导入,计算平均分,用函数
求出每个人的平均成绩,同时又写了一个函数求出某个人的平均成绩,最后将运行结果
送到文件中,其中程序小错误已经全部改掉,但在第一步输入的时候好像就出了点问题
不知道是什么原因,请大佬指正。#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define MAX 200
struct student
{
char no;// 学号
char name; // 姓名
float score; // 分数
float math;
float eng;
float phy;
};
float ave;
struct data
{
int count; // 当前学生数组中学生的个数
struct student stu; // 学生数组
}dd;
// 显示主菜单
void menu()
{
system("cls");//清屏
printf("\n\n\n");
printf("\t\t\t*******************************\n");
printf("\t\t\t \n");
printf("\t\t\t 学生成绩管理系统 \n");
printf("\t\t\t \n");
printf("\t\t\t 从文件中输入学生数据 \n");
printf("\t\t\t 查找个人成绩(学号) \n");
printf("\t\t\t 输出所有成绩记录 \n");
printf("\t\t\t 结果存入文件 \n");
printf("\t\t\t 退出 \n");
printf("\t\t\t \n");
}
// 等待用户按回车后回到主菜单
void to_menu()
{
char c1,c2;
printf("\n\n\n按回车键返回主菜单...");
scanf("%c%c",&c1,&c2);//第一个字符吸收上次的确认回车键
menu();
}
// 将数据从文件读到结构体数组中
void read_data()
{
FILE *fp;
int i,k;
k=0;
if((fp=fopen("C:\\Users\\zdx\\Desktop\\2\\data.txt","rb"))==NULL) // 如果文件不存在
{
printf("cannnot open file\n");
exit(0);
}
for(i=0;i<MAX;i++)
{
fread(&dd.stu,sizeof(struct student),1,fp);
}fclose(fp);
}
//计算个人平均成绩
void averagy_date()
{
int i;
double total;
double ave;
for(i=0;i<dd.count;i++)
{
total=dd.stu.math+dd.stu.phy+dd.stu.eng;
ave=total/3;
}
}
// 查询学生成绩(学号)
void query_data()
{
int i,k;
char no;
printf("\n请输入要查询学生的学号:");
scanf("%s",no);
k=-1;
for(i=0;i<dd.count;i++)
{
if(strcmp(dd.stu.no,no)==0)
{
printf("\n\n学号\t姓名\t数学\t英语\t物理\t平均分");
printf("\n-----------------------------------------------------------------\n");
k=i;
printf("%s\t%s\t%-7.1f\t%-7.1f\t%-7.1f\t-7.1f\n",dd.stu.no,dd.stu.name,dd.stu.math,dd.stu.eng,dd.stu.phy,ave);
break;//学号应该是唯一的,找到了一个就代表以后的没有了。
}
}
if(k==-1)
{
printf("\n\n没有找到该学生(学号-%s)!",no);
}
}
//输出所有成绩记录
void view_data()
{
int i;
printf("学号\t姓名\t数学\t英语\t物理\t平均分");
printf("\n-------------------------------------------------------------------\n");
for(i=0;i<dd.count;i++)
printf("%s\t%s\t%-7.1f\t%-7.1f\t%-7.1f\n",dd.stu.no,dd.stu.name,dd.stu.math,dd.stu.eng,dd.stu.phy,ave);
printf("\n-------------------------------------------------------------------\n");
}
// 将数据从结构体数组保存到文件中
void save_data()
{
FILE *fp;//文件指针
int i;
fp=fopen("C:\\Users\\zdx\\Desktop\\2\\data.txt","wb");//文件存储位置:当前文件夹
fwrite(&dd.count,sizeof(int),1,fp);
for(i=0;i<dd.count;i++)
fwrite(&dd.stu,sizeof(struct student),1,fp);
fclose(fp);
}
// 主函数
void main()
{
int fun;
dd.count = 0;
read_data();
menu();
while(1)
{
printf("请输入功能号:");
scanf("%d",&fun);
switch(fun)
{
case 1: read_data();break; // 从文件中读取学生数据
case 2: query_data();break; // 查找个人成绩(学号)
case 3: view_data();break; // 输出所有成绩记录
case 4: query_data();break; // 结果存入文件
case 0: break; // 退出
}
if(fun==0) break;
to_menu();
}
return;
} 凉帖了吗?只回答第一个问题也行,fread和fwrite能不能同时存在于一个程序中啊?
页:
[1]