关于#c++#的问题:(https://img-mid.csdnimg.cn/release/static/image/mid/ask/139174541976165.jpg "#left")

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);


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/139174541976165.jpg "#left")

参考GPT和自己的思路:

这段代码是用来将学生信息保存到文件中的,具体实现就是将每位学生的信息按照一定格式写入到指定的文件中。

其中,fopen_s函数的第一个参数是文件路径,第二个参数是打开方式,这里的"w+"表示可读可写,同时清空文件内容。如果打开失败,则会输出一个错误信息并退出程序。

接下来的for循环是对每位学生的信息进行写入操作,使用fprintf函数将信息按照指定的格式写入到fp这个文件指针所指向的文件中。

最后,使用fclose函数关闭文件,保存文件操作完成。

参考GPT和自己的思路:

这段代码中存在一些问题:

  1. 第一行的函数参数列表中没有参数,可能是因为代码片段缺失了一部分。需要补充完整之后再进行分析。

  2. fopen_s 函数的第一个参数应该是一个指针类型,表示打开的文件对象,需要修改为 &fp

  3. fprintf 函数格式化字符串的格式不正确,应该是 %s 而不是 %d,而且需要在第一个 % 符号前加上一个空格。

  4. &-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需要对字符串加上一个参数表示缓冲区长度

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^