慧咕咕 2022-12-18 15:15 采纳率: 87%
浏览 34
已结题

C语言文件读取问题,向文件内存储数据成功但读取时屏幕输出全是零


typedef struct subjects        //定义结构体叫作SUB,在后面就可以直接使用
{
     int num;                 //课程编号
     char name[30];           //课程名称
     char kind[20];           //课程性质
     int stime;               //总学时
     int ttime;               //授课学时
     int etime;               //实验或上机学时
     int score;               //学分
     int term;                //开课学期
     struct subjects *next;
}SUB;       
void choose()//选新课程--学生选课函数
{
    SUB *p,*q;
    int a[5];
    int num,total=0,i=0,j;  //total为总学分,i为num的数组单元
    printf("输入要选修的课程的编号,编号之间以空格分开\n");
    scanf("%d",&num);//接收输入的第一个编号
    printf("如果确认输入完要选修的课程的编号,请输入0:");
    while(num!=0)//数据不为零,说明为输入的课程编号信息
    {
        for(p=head;p;p=p->next)//在链表中从头找,直至找到最后一个节点的指针域指为空
        {
            if(p->num==num)//编号一致的课程
            {
                total=total+p->score;//将所找到的课程的学分累加
                a[i]=num; //数组a存课程编号num
                i++;
            }
        }
        scanf("%d",&num);//接收缓存区下一个数据
    }
    if(total<60)
    { 
        printf("选修总学分为%d,未达到60,选修失败!\n",total);
        system("pause");
    }
    else
    {
        
        FILE *fp;    //声明fp是指针,用来指向FILE类型的对象,fp是指向文件结构体的指针变量
        fp=fopen("3-2.txt","w");       //打开文件,将学生选课信息写入文件
        fprintf(fp,"课程编号  课程名称  课程性质  总学时  授课学时  实践或上机学时  学分  开课学期\n");
        for(j=0;j<i;j++)
        {
            for(q=head;q;q=q->next)
            {
                if(q->num==a[j])
                {
                    //将学生选课信息输出输出到文件中
                    fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,
                                                               q->ttime,q->etime,q->score,q->term);
                }
            }
        }
        fclose(fp);  //关闭文件
        printf("\t\t\n*****选修成功!****\n");
        printf("\n您选修的课程总学分为%d,课程分别为:\n",total);
        printf("\n课程编号  课程名称  课程性质  总学时  授课学时  实践或上机学时  学分  开课学期\n");
        for(j=0;j<i;j++)
        {
            for(q=head;q;q=q->next)
            {
                if(q->num==a[j])
                {
                    printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",q->num,q->name,q->kind,q->stime,
                                                           q->ttime,q->etime,q->score,q->term);
                }
            }
        }
        printf("\n以上信息全部保存在'3-2.txt'中\n");
    }
    system("pause");   //暂停,没这个语句点开生成的.exe文件
}


void prin1()   //浏览学生所有选修课程
{
    SUB *ptr;    
    FILE *fp;   //声明fp是指针,用来指向FILE类型的对象,fp是指向文件结构体的指针变量
    fp=fopen("3-2.txt","r");
    if(fp==NULL)
    {
        printf("Cannot open file.\n");
        choose();
    }
    printf("课程编号  课程名称  课程性质  总学时  授课学时  实践或上机学时  学分  开课学期\n");
    while(!feof(fp))
    {
        ptr=(SUB*)malloc(sizeof(SUB));
        //从文件中读入数据
        fscanf(fp,"%d%s%s%d%d%d%d%d\n",&ptr->num,ptr->name,ptr->kind,&ptr->stime,
                                       &ptr->ttime,&ptr->etime,&ptr->score,&ptr->term);
        printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,
                                               ptr->ttime,ptr->etime,ptr->score,ptr->term);
    }
    system("pause");
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-12-18 18:07
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月19日
  • 已采纳回答 12月19日
  • 创建了问题 12月18日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装