void save()
{
int i;
FILE* fp = fopen_s("c:\\score.txt", "w+");
if (fp==NULL)
{
printf("文件打开失败!\n");
exit(1);
}for (i = 0;i < num;i++)
fprintf(fp, "&-101d%-11s%-9s%-8d%-8d%-9d&-8d\n", stu[i].id, stu[i].name, stu[i].sex, stu[i].math,
stu[i].english, stu[i].c_program, stu[i].total);
printf("文件保存成功!\n");
fclose(fp);

参考GPT和自己的思路:
这段代码是用来将学生信息保存到文件中的,具体实现就是将每位学生的信息按照一定格式写入到指定的文件中。
其中,fopen_s
函数的第一个参数是文件路径,第二个参数是打开方式,这里的"w+"表示可读可写,同时清空文件内容。如果打开失败,则会输出一个错误信息并退出程序。
接下来的for循环是对每位学生的信息进行写入操作,使用fprintf
函数将信息按照指定的格式写入到fp
这个文件指针所指向的文件中。
最后,使用fclose
函数关闭文件,保存文件操作完成。
参考GPT和自己的思路:
这段代码中存在一些问题:
第一行的函数参数列表中没有参数,可能是因为代码片段缺失了一部分。需要补充完整之后再进行分析。
fopen_s
函数的第一个参数应该是一个指针类型,表示打开的文件对象,需要修改为 &fp
。
fprintf
函数格式化字符串的格式不正确,应该是 %s
而不是 %d
,而且需要在第一个 %
符号前加上一个空格。
&-101d
应该是没有意义的,需要删除。
补充完整后,代码如下:
void save(Student stu[], int num)
{
int i;
FILE* fp;
fopen_s(&fp, "c:\\score.txt", "w+");
if (!fp)
{
printf("文件打开失败!\n");
exit(1);
}
for (i = 0; i < num; i++)
{
fprintf(fp, "%-11s %-9s %-8s %-8d %-8d %-8d %-8d\n",
stu[i].id, stu[i].name, stu[i].sex, stu[i].math,
stu[i].english, stu[i].c_program, stu[i].total);
}
printf("文件保存成功!\n");
fclose(fp);
}
注意:这个函数仅仅是把学生的成绩保存到文件中,没有考虑文件读取、数据校验、文件路径等方面的问题,使用时需要进一步完善。
fopen_s的参数不对,前面scanf_s也不对
比如 fopen_s(&fp,“filename”,“w”);这里需要一个模式的参数
scanf_s需要对字符串加上一个参数表示缓冲区长度