88Ra 2023-03-24 07:11 采纳率: 66.7%
浏览 49
已结题

C语言函数 fopen

fopen函数为啥在VS2022版本上报错 说不安全

img

#include<stdio.h>
#include<stdlib.h>


int N, i;
struct XUS
{
    char xh[500];
    char xm[500];
    int cj[3];
};


int main()
{



    printf("请输入共几名学生");
    scanf_s("%d", &N);
    XUS* x = new XUS[N]{};
    for (i = 1; i < N + 1; i++)
    {

        printf("请输入第%d名学生的学号:", i);
        scanf_s("%s", &x[i].xh, sizeof(x[i].xh));

        printf("请输入第%d名学生的姓名:", i);
        scanf_s("%s", &x[i].xm, sizeof(x[i].xm));


        printf("请输入第%d名学生的成绩:", i);
        scanf_s("%d", &x[i].cj[0]);
        scanf_s("%d", &x[i].cj[1]);
        scanf_s("%d", &x[i].cj[2]);

        printf("\n");
    }
    FILE* fp;
    fopen("xinxi.txt", "w");
    if (fp == NULL)
    {
        printf("不能打开文件\n");
                                      //表示正常退出

    }
    for (i = 1; i < N + 1; i++)
    {
        fprintf(fp, "%d ", (int)x[i].xh);
        fprintf(fp, "%s ", x[i].xm);
        fprintf(fp, "%d ", x[i].cj[0]);
        fprintf(fp, "%d ", x[i].cj[1]);
        fprintf(fp, "%d ", x[i].cj[2]);
        printf("\n");

    }
    
    fclose(fp);
    

    return 0;
}


展开全部

  • 写回答

5条回答 默认 最新

  • qzjhjxj 2023-03-24 08:24
    关注

    fopen("xinxi.txt", "w"); 这句正确的是:fp = fopen("xinxi.txt", "w"); , 才有后面的if (fp == NULL) , 还有其他的输入输出问题,一并修改如下,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    int N, i;
    struct XUS
    {
        char xh[500];
        char xm[500];
        int cj[3];
    };
    
    int main()
    {
        printf("请输入共几名学生");
        scanf_s("%d", &N);
        struct XUS* x = new struct XUS[N]{};
        for (i = 0; i < N; i++)  //for (i = 1; i < N + 1; i++) 修改
        {
    
            printf("请输入第%d名学生的学号:", i + 1);  //printf("请输入第%d名学生的学号:", i); 修改
            scanf_s("%s", x[i].xh, sizeof(x[i].xh));   //scanf_s("%s", &x[i].xh, sizeof(x[i].xh)); 修改
    
            printf("请输入第%d名学生的姓名:", i + 1);  //printf("请输入第%d名学生的姓名:", i); 修改
            scanf_s("%s", x[i].xm, sizeof(x[i].xm));   //scanf_s("%s", &x[i].xm, sizeof(x[i].xm)); 修改
    
            printf("请输入第%d名学生的成绩:", i + 1);  //printf("请输入第%d名学生的成绩:", i); 修改
            scanf_s("%d", &x[i].cj[0]);
            scanf_s("%d", &x[i].cj[1]);
            scanf_s("%d", &x[i].cj[2]);
            printf("\n");
        }
        FILE* fp;
        errno_t err;  // 修改   
        err = fopen_s(&fp, "xinxi.txt", "w"); //fopen("xinxi.txt", "w"); 修改
        if (err != 0) //if (fp == NULL)  修改
        {
            printf("不能打开文件\n");
            return  1;  //表示正常退出   修改
        }
        for (i = 0; i < N; i++)     //for (i = 1; i < N + 1; i++) 修改
        {
            fprintf(fp, "%s ", x[i].xh);  //fprintf(fp, "%d ", (int)x[i].xh); 修改
            fprintf(fp, "%s ", x[i].xm);
            fprintf(fp, "%d ", x[i].cj[0]);
            fprintf(fp, "%d ", x[i].cj[1]);
            fprintf(fp, "%d ", x[i].cj[2]);
            printf("\n");
        }
        fclose(fp);
        return 0;
    }
    
    

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    88Ra 2023-03-25 04:57

    为什么我那个保存到.txt文件的是数字乱码诶 你这个可以的

    回复
    88Ra 2023-03-25 05:05

    errno_t是啥子哦

    回复
    qzjhjxj 回复 88Ra 2023-03-25 05:10

    类同于int 型数据,一个共用体,可以去百度下详细解释。

    回复
    展开全部4条评论
查看更多回答(4条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月25日
  • 创建了问题 3月24日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部