雷子_w 2023-02-22 19:19 采纳率: 50%
浏览 37

fp指针为空解决不了

fp指针为空 返回直一直是0
放出部分代码 进去后直接选1 enter就ok


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int i,n, num = 0;
void query();//查询函数//
void xiugai();//修改函数//
void output();//输出函数//
void input();//输入函数//
void count();//读取文件//
void tuichu();//退出函数//
void deletee();//删除函数//
void ave();//求全班平均值函数//

//学生结构体//
struct student
{
    char name[32]; //姓名
    int number[3]; //学号
    float chinese; //语文成绩 
    float math; //数学成绩 
    float english; // 英语成绩
    float sum;
}stu[1];

void count()
{
    FILE* fp;  //定义文件指针fp//
    fp = fopen_s(&fp,"stu.dat", "wb");    
    if (fp == NULL)                        //判断文件是否为空//
    {
        printf("Cannot open file!");
        exit(0);
    }
    fclose(fp); //关闭文件//
}
void main() // 菜单 //
{
        int i;
        system("cls");
        printf("\t\t   欢迎进入学生信息管理系统\n");
        printf("\t\t================================\n");
        printf("\t\t*****    请选择操作序号:   *****\n");
        printf("\t\t*       1.输入学生信息         *\n");
        printf("\t\t*       2.输出学生信息         *\n");
        printf("\t\t*       3.修改学生信息         *\n");
        printf("\t\t*       4.查询学生信息         *\n");
        printf("\t\t*       5.删除学生信息         *\n");
        printf("\t\t*      6.查看班级平均分        *\n");
        printf("\t\t*           0.退出             *\n");
        printf("\t\t================================\n");
        scanf_s("%d", &i);
        system("cls");
      switch (i)
        {
        case 0:tuichu(); break;  //退出系统//
        case 1:input(); break;    //输入学生信息//    
        case 2:output(); break;     //输出学生信息//
        case 3:xiugai(); output(); break;    //修改学生信息//
        case 4:query(); break;  //查询学生信息//
        case 5:deletee(); break;//删除学生信息//
        case 6:ave(); break;//班级平均分//
        default:
            printf("输入错误\n");     //错误纠正// 
        }
}
void input() //成绩输入//
{
    int i,j;
    const int sum;
    char ch;
    FILE *fp;
    printf("请输入学生的人数:\n");
    scanf_s("%d", &sum);
    fp = fopen_s(&fp, "stu.dat", "wt");
    for (i = 0; i < sum; i++)
    {
        printf("输入学生学号\n");
        scanf_s("%d", &stu[i].number);

        printf("输入学生姓名\n");
        scanf_s("%s", stu[i].name, sizeof(stu[i].name));

        printf("输入学生语文成绩\n");
        scanf_s("%f", &stu[i].chinese);

        printf("输入学生数学成绩\n");
        scanf_s("%f", &stu[i].math);

        printf("输入学生英语成绩\n");
        scanf_s("%f", &stu[i].english);

        printf("\t是否继续输入?\n");
        printf("\tY   or   N\n");
        do 
        {
            ch = getchar();
            if (ch == 'Y' || ch=='y')
                break;
            else
                if (ch == 'N' || ch=='n')
                    main();
                else continue;

        } while (1);
        system("cls");
    }
    if (fp == NULL)
        return 0;
    for (j = 0; j < i; j++)
        fwrite(&stu[j], sizeof(struct student), 1, fp);
    fclose(fp);
    printf("录入成绩成功!\n");
    system("cls");
    main();
}

img


数万成绩就这样了 按我的程序来看应该写进文件然后输出 “输入成功”

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-02-22 19:33
    关注

    fp = fopen_s(&fp,"stu.dat", "wb");
    改成
    fopen_s(&fp,"stu.dat", "wb");
    就行了,不要返回值啊

    评论

报告相同问题?

问题事件

  • 修改了问题 2月23日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验
  • ¥15 canal如何实现将mysql多张表(月表)采集入库到目标表中(一张表)?
  • ¥15 wpf ScrollViewer实现冻结左侧宽度w范围内的视图
  • ¥15 栅极驱动低侧烧毁MOSFET
  • ¥30 写segy数据时出错3
  • ¥100 linux下qt运行QCefView demo报错
  • ¥50 F1C100S下的红外解码IR_RX驱动问题