C语言学生管理系统中有点疑问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学生管理系统中有点疑问相关的知识,希望对你有一定的参考价值。

if (fread(&num,sizeof(int),1,fp)!=1)

num=-1;

num是记录人数的,为什么要num=-1;

只给出这一小段代码很难确切的给出解释。但是经验之谈,一般这类记录人数的变量(此例中为num),如果在程序中出现某些反常识的值(此例中为负数),那么有可能是人为设置的报错,比如之后用if判断如果num=-1,程序自动打印一段话说明程序出错无法继续运行继而强行退出。

之前的if判断中用到了fread函数。
函数原型:
size_t fread ( void *buffer, size_t size, size_tcount, FILE *stream)
参数:
1. buffer
用于接收数据的内存地址
2. size
要读写的字节数,单位是字节
3. count
要进行读写多少个size字节的数据项,每个元素是size字节.
4. stream
输入流
Fread函数用途为从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

然后再来看你的if判断中的内容:
fread(&num,sizeof(int),1,fp)!=1
你这里显然count值设置成了1,意思是你想在文件里读出1个元素,如果成功的话fread函数返回值为1。”!=”意为不等于,如果最后返回值不是1,那么证明你读取文件的操作失败。然后就是我之前说的把num设置一个反常规值,之后进行打印错误和强行退出的操作。你看看我说的对不对。
参考技术A fread(&num,sizeof(int),1,fp)这个函数的原型是
size_t fread ( void *buffer, size_t size, size_t count, FILE *stream) ;
这个函数的返回值是实际读取的元素个数。如果返回值与count不相同,则可能文件结尾或发生错误。
所以fread(&num,sizeof(int),1,fp)!=1即返回值不等于1(也就是count值),那么说明出错,所以将num置为-1,主要是为了防止在之后的运行过程num读到的是一个错误值(这个值可能是随机的),造成之后的运行错误而无法判断到底是哪里出错了。本回答被提问者和网友采纳

以上是关于C语言学生管理系统中有点疑问的主要内容,如果未能解决你的问题,请参考以下文章

c语言学生管理系统,请把每行代码解释清楚,谢谢了

关于win7系统移出winsxs文件夹的疑问

用C语言编写学生管理系统界面

c语言使用ArrayList类管理学生成绩表,实现添加、查找、删除、排序功能。界面要求

c语言强制转换的疑问

c语言 学生管理系统