c语言程序出现错误,C语言程序错误,不能正常读写文件,求解啊

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#define LEN sizeof(struct student)

#include

#include

#include

struct student

{

int num;

char name[20];

int score[3];

int aver;

}; void personal_information_input(FILE *fp)

{

struct student *p;

int a,i,n;

printf("请输入将要输入的学生个数: ");

scanf("%d",&n);

printf("请输入学生的学号姓名和三科成绩:\n");

for(i=0;i

{

a=i+1;

printf("%d:",a);

p=(struct student *)malloc(LEN);

scanf("%d%s%d%d%d",&p->num,&p->name,&p->score[0],&p->score[1],&p->score[2]);

fwrite(p,LEN,1,fp);

p++;

}

} void personal_information_print(FILE *fp)

{

struct student *p,*p1;

int i=0;

p=(struct student *)malloc(LEN);

printf("请输入需要查找的学生的学号: ");

scanf("%d",&p->num);

p1=(struct student *)malloc(LEN);

fread(p1,LEN,1,fp);

while(!feof(fp))

{

fread(p1,LEN,1,fp);

if(p1->num==p->num)

printf("学号:%d 姓名:%s 成绩:%d %d %d 平均成绩:%d\n",

p->num,p->name,p->score[0],p->score[1],p->score[2],p->aver);

p1++;

fread(p1,LEN,1,fp);

}

} void average(FILE *fp)

{

struct student *p1;

p1=(struct student *)malloc(LEN);

fread(p1,LEN,1,fp);

while(!feof(fp))

{

p1->aver=(p1->score[0]+p1->score[1]+p1->score[2])/3.0;

fwrite(p1,LEN,1,fp);

p1++;

// p1=(struct student *)malloc(LEN);

fread(p1,LEN,1,fp);

}

}

void score_output(FILE *fp)

{

struct student *p1;

p1=(struct student *)malloc(LEN);

fread(p1,LEN,1,fp);

while(!feof(fp))

{

printf("学号:%d 姓名:%s 成绩:%d %d %d 平均成绩:%d\n",

p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->aver);

// p1=(struct student *)malloc(LEN);

p1++;

fread(p1,LEN,1,fp);

}

}

void score_search(FILE *fp)

{

struct student *p,*p1;

p=(struct student *)malloc(LEN);

printf("输入要查找的学生成绩: ");

scanf("%d",&p->score[0]);

p1=(struct student *)malloc(LEN);

fread(p1,LEN,1,fp);

while(!feof(fp))

{

if(p1->score[0]==p->score[0])

printf("学号:%d 姓名:%s 成绩:%d %d %d 平均成绩:%d\n",

p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->aver);

else if(p1->score[1]==p->score[0])

printf("学号:%d 姓名:%s 成绩:%d %d %d 平均成绩:%d\n",

p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->aver);

else if(p1->score[2]==p->score[0])

printf("学号:%d 姓名:%s 成绩:%d %dd %d 平均成绩:%d\n",

p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->aver);

p1=(struct student *)malloc(LEN);

fread(p1,LEN,1,fp);

p1++;

}

} void main()

{

char ch;

FILE *fp;

char filename[20];

printf("请输入所用的文件名:");

scanf("%s",filename);

if((fp=fopen(filename,"ab+"))==NULL)

{

printf("无法打开此文件!\n");

exit(0);

}

else

{ fp=fopen(filename,"wb+"); }

ch=getchar();

while(1)

{

printf("\n******************欢迎使用学生信息管理系统********************\n");

printf("\n******************** 1. 个人信息的录入 ********************\n");

printf("\n******************** 2. 个人信息的输出 ********************\n");

printf("\n******************** 3. 计算平均成绩 ********************\n");

printf("\n******************** 4. 成绩的查询 ********************\n");

printf("\n******************** 5. 成绩的输出 ********************\n");

printf("\n******************** 6. 退出程序 ********************\n");

printf("\n************ 请选择上述选项执行相应的操作 ************\n");

printf("************** 你选择执行的选项是: ");

ch=getchar();

switch (ch)

{

case '1':personal_information_input(fp);break;

case '2':personal_information_print(fp);break;

case '3':average(fp);break;

case '4':score_search(fp);break;

case '5':score_output(fp);break;

case '6':exit(0);

default: break;

}

getchar();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现DDD领域驱动设计: Part 2

原文链接: https://dev.to/salah856/implementing-domain-driven-design-part-ii-2i36实现:构建块这是本系列的重要部分。我们将通过示例介绍和解释一些明确的规则。在实现领域驱动设计时,你可以遵循这些规则并应用到你的解决方案中。示例示例将使用GitH…

王彪20162321 2016-2017-2 《程序设计与数据结构》第5周学习总结

王彪 2016-2017-2 《程序设计与数据结构》第5周学习总结 教材学习内容总结 1.关键概念 1.面向对象程序设计的核心是类的定义,它代表了状态和行为的对象。2.变量的作用域依赖于变量声明的位置,作用域决定在哪里可以使用变量。3.对象应该是封装的&#xff…

ubuntukylin14安装ns-allinone-2.35教程(虚拟机ubuntu同理)

准备材料: 1.ubuntukylin14,百度进官网自行下载; 2.ns-allinone-2.35.tar.gz,百度进官网自行下载; 3.虚拟机:vmwareworkstation(可选). 4.不推荐windows环境下的cygwinns2&#xff0…

C语言之理解(*(void (*)())0)()和signal函数

1、需要理解的表达式 计算机启动的时候,硬件将要调用首地址为0位置的子例程,表达式如下 (*(void (*)())0)(); 2、解释 我们知道void (*f)() f是指向返回值为void类型的函数 因此,(void (*)())表示指向返回值为void类型的函数的指针的类型强制转换符 我们调用函数指针的时…

c语言指针索引数组,C语言数组指针表示法

指针在处理数组时很有用,我们可以用指针指向已有的数组,也可以从堆上分配内存然后把这块内存当做一个数组使用。数组表示法和指针表示法在某种意义上可以互换。不过,它们并不完全相同,后面的“数组和指针的差别”中会详细说明。单…

关于我自己的三个层次

有时候会意识到自己不够聪明,然后在把自己同那些大家相比时会感到自己的渺小,比如说博弈论专家纳什在20世界50年代就弄清楚的博弈论我现在学起来还是感觉很晦涩难懂,这就是自己的天分确实不是很好的直接证明。 天分好不好不是决定性因素&…

C# 使用AggregateException 信息

为了得到所有失败任务的异常信息,可以将 Task.WhenAll 返回的结果写到一个Task 变量中。这个任务会一直等到所有任务都结束。否则,仍然可能错过抛出的异常。上一小节中,catch 语句只检索到第一个任务的异常。不过,现在可以访问外部…

简单动态规划问题分析

例题: 1022: 菜鸟和大牛(csuoj) 像这一类问题,首先不管是属于什么类型的,如果是按照题目的思路一步步走下来,然后运行,最后肯定是要超时的,究其原因,它的时间复杂度很不合…

Android之内置和外置sdcard路径显示并且写入数据

1、效果图片 2、部分代码 package com.example.sdcardcheck;import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Array; import java.lang.…

数据挖掘——数据仓库

虽然存在数据仓库并不是数据挖掘的先决条件,但实际上,若能访问数据仓库,数据挖掘的任务就会变得容易的多。 数据仓库的主要目标是增加决策过程的“情报”和此过程的相关人员的知识。数据仓库对不同的人来说有不同的意义。 数据仓库是一个集成…

c2000 汇编语言指令,C2000系CMD文件的配置理解

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有帐号?注册x推荐CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件&#…

OxyPlot 导出图片及 WPF 元素导出为图片的方法

OxyPlot 导出图片及 WPF 元素导出为图片的方法目录OxyPlot 导出图片及 WPF 元素导出为图片的方法一、OxyPlot 自带导出方法二、导出 WPF 界面元素的方法三、通过附加属性来使用独立观察员 2022 年 2 月 26 日最近有个需求,就是将 OxyPlot 图形导出图片。经过尝试&am…

java实现各种算法

package sortAlgorithm;import java.io.File;import java.io.IOException;import java.sql.Time;import java.util.Random;* author sky* 该类给出各种排序算法public class sort{private static Integer[] elem(int n){int Nn;Random randomnew Random();Integer elem[]new In…

BDB (Berkeley DB)简要数据库(转载)

使用最近DBD。然后搜了下相关资料,首先公布的是一门科学: 转会http://www.javaeye.com/topic/202990 DB综述DB最初开发的目的是以新的HASH訪问算法来取代旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm。GNU项目…

C语言之rand()和srand()函数

1、rand()、srand()函数介绍 srand 初始化随机种子,rand 产生随机数 定义函数:int rand(void) 函数功能:产生随机数 函数说明:rand的内部实现是用线性同余法做的,不是真的随机数,因为其周期特别长,一定的范围里可看成是随机的。rand()会返回一随机数值,范围在0至RAND_…

delphi中利用Indy的TIdFtp控件实现FTP协议

2019独角兽企业重金招聘Python工程师标准>>> delphi中利用Indy的TIdFtp控件实现FTP协议版权声明:本文为博主原创文章,未经博主允许不得转载。现在很多应用都需要上传与下载大型文件,通过HTTP方式上传大文件有一定的局限性。幸好FT…

一篇文章了解Liquid模版引擎

背景平常比如开发个代码生成器一般是定一个模板,然后里面很多变量,根据数据生成文件。这时候模版引擎就派上了用场。下面我们来介绍下Liquid。什么是Liquid 呢,就像java、c#等编程语言一样,Liquid也是一种独立的语言,没…

C++之map插入数据相同的key不能覆盖value解决办法

1、问题 C里面,如果map里面插入之前的<key, value>,如果key在map里面有的话&#xff0c;不会覆盖之前的value,一般先判断之前有没有数据&#xff0c;有的话先删除&#xff0c;然后再去添加。 2、代码实现 3、运行结果

【BZOJ】【4145】【AMPPZ2014】The Prices

状压DP/01背包 Orz Gromah 容易发现m的范围很小……只有16&#xff0c;那么就可以状压&#xff0c;用一个二进制数来表示买了的物品的集合。 一种简单直接的想法是&#xff1a;令$f[i][j]$表示前$i$个商店买了状态集合为$j$的商品的最小代价&#xff0c;那么我们转移的时候就需…

Java中的String,StringBuilder,StringBuffer三者的区别

最近在学习Java的时候&#xff0c;遇到了这样一个问题&#xff0c;就是String,StringBuilder以及StringBuffer这三个类之间有什么区别呢&#xff0c;自己从网上搜索了一些资料&#xff0c;有所了解了之后在这里整理一下&#xff0c;便于大家观看&#xff0c;也便于加深自己学习…