scanf("%d",&n);
//申请
int *p = (int *)malloc(n * sizeof(int));
//内存申请成功
if(p != NULL){
out(p,n);
int i;
for(i=0;i
E:释放内存之后却继续去使用这一块内存
避免方式:使用 free 内存之后,把指针置为 NULL。
7、根据设计要求,因为学生的人数不确定,使用链表存储存储学生信息更为适
宜。
8、文件操作
所谓“文件”是指一组相关数据的有序集合。这个数据集有一个名称,叫做
文件名。在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通
过文件指针就可对它所指的文件进行各种操作。定义说明文件指针的一般形式为:
FILE*指针变量标识符;其中 FILE 应为大写,它实际上是由系统定义的一个结
构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不
必关心 FILE 结构的细节。例如:FILE *fp;表示 fp 是指向 FILE 结构的指针变
量,通过 fp 即可找存放某个文件信息的结构变量,然后按结构变量提供的信息
找到该文件,实施对文件的操作。习惯上也笼统地把 fp 称为指向一个文件的指
针。文件的打开与关闭文件在进行读写操作之前要先打开,使用完毕要关闭。所
谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文件,以
便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件
进行操作。
在C语言中,文件操作都是由库函数来完成的。
C 语言中没有输入输出语句,所有的输入输出功能都用 ANSI C 提供的一组
标准库函数来实现。文件操作标准库函数有:
文件的打开操作 fopen 打开一个文件;
文件的关闭操作 fclose 关闭一个文件;
文件的读写操作 fgetc 从文件中读取一个字符;
fputc 写一个字符到文件中去;
fgets 从文件中读取一个字符串;
fputs 写一个字符串到文件中去;
fprintf 往文件中写格式化数据;
fscanf 格式化读取文件中数据;
fread 以二进制形式读取文件中的数据;
fwrite 以二进制形式写数据到文件中去;
getw 以二进制形式读取一个整数;
putw 以二进制形式存贮一个整数;
文件状态检查函数 feof 文件结束;
ferror 文件读/写出错;
clearerr 清除文件错误标志;
ftell 了解文件指针的当前位置;
文件定位函数 rewind 反绕;
fseek 随机定位。
9、scanf 函数
功能:执行格式化输入。
用法:int scanf(char *format[,argument,...]);
scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘)读取输
入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。
其调用格式为:scanf("<格式化字符串>",<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回 EOF。
scanf("%d", &pstu->num)操作,要求读入十进制整数,输入正确时,成功读
入数据返回 1,若错输为字母,读取不成功返回 0。
当 scanf()读取到错误的数据时,会将数据退回到缓冲区。如使用“%d”格
式读取 45d,会读入 45,d 不是整数,退回到缓冲区。这样会导致会面的读取出
现错误。此时可使用“fflush(stdin);”指令清除缓冲区。
四、实验内容
1、完成一个简易的控制台窗口显示的学生管理系统,功能包括:添加学生信息,
删除某个学生信息,显示某个学生信息,修改学生信息,删除所有学生信息,显
示所有学生信息,显示信息数量,读取文件学生信息,保存学生信息至文件,退
出系统;
2、自己设计管理系统采用的数据结构(不局限于单链表)及文件操作方式;
3、要有容错代码,如对无效数据、错误指针、无效操作的判断。
五、思考题
1、如何提高程序的健壮性和鲁棒性?
2、指针有哪些类型?在使用中需要注意哪些问题?
3、不同类型链表的优势和缺点是什么?