cxk521aoligei 2021-09-07 19:52 采纳率: 90.9%
浏览 108
已结题

c语言文件操作问题!!

想写个学生成绩管理系统,写了一个功能,两个函数,save函数用来保存数据到文件里,随便写了一段代码打印一个文件里的数据,结果乱码,不知道到底数据写没写进文件里。


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define LEN  sizeof(struct Student)
#include"声明.h"
#include"自定义函数.h"



int main(void) 
{
    char s[15];
    
    
    while(1)
    {
        printf("请输入功能编号完成相应功能\n");
        printf("1.输入学生信息并保存\n");
        printf("2.从文件中读取学生信息,并建立链表\n");  
        printf("3.按学号删除学生信息\n"); 
        printf("4.按学号插入学生信息\n"); 
        printf("5.显示当前文件信息\n"); 
        printf("6.查找总成绩最高的学生\n");
        printf("7,寻找指定学号或姓名的学生并修改该学生信息 \n");
        printf("8.查找某个专业、某门课程的成绩小于某个分数的学生\n");
        printf("9.删除某个班级、某门课程的成绩小于某个分数的学生\n");
        printf("10.按照姓名排序\n");
        printf("11.保存当前信息\n");
        printf("其他,推出系统\n");


int x;
struct Student *h;
printf("亲输入编号:");
scanf("%d",&x); 
switch(x)
{
    case(1):h=input();save(h);break;
        
声明部分
struct Student {
    
    char num[10];//学号
        char name[15];//姓名 
        char major[10];//专业computer,softwear,network
        int classNo;//班级 
        int score[3];//3门课的成绩  
        int sum;//3门课的总成绩 
        struct Student *next;//指针    88u

    
    
    
};
int n,a;
struct Student * input();

void save(struct Student *head)


struct Student * input()
{
    n=0;
    struct Student *head;
    struct Student *p1,*p2;
    head=(struct Student *)malloc(LEN);
    printf("请输入学生人数:");
    scanf("%d",&a);
    printf("请录入这%d名学生的信息:\n",a);
    while(n<a)
    {
        p1=(struct Student*)malloc(LEN);
        scanf("%s-%s-%s-%d-%d-%d-%d",p1->num,p1->name,p1->major,&p1->classNo,&p1->score[0],&p1->score[1],&p1->score[2]);
        p1->sum=0;
        p1->sum=p1->score[0]+p1->score[1]+p1->score[2];
        n++;
        p1->next=0;
        if(n==1)
        {
            head=p1;
            
        }
        else
        {
            p2->next=p1;
            p2=p1;
            
            
            
        }
        
        
    }
    p2->next=NULL;
    
    
    
    
    
    
    return(head);
}
void save(struct Student *head)
{
    struct Student *p1,*p2;
    p2=(struct Student*)malloc(LEN);
    char s[15];
    p1=head->next;
    FILE *fp;
    printf("亲输入要建立的文件名:\n");
     scanf("%s",&s);
     if((fp=fopen("s.txt","wb"))==NULL)
     {
         
         printf("打开文件失败");
         exit(0); 
     }
    while(p1!=NULL)
    {
        if(fwrite(p1,LEN,1,fp)!=1)
        {
            printf("写入文件失败\n"); 
        }
        p1=p1->next;
    }
    
    printf("写入文件成功!\n"); 
    fclose(fp);
    if((fp=fopen("s.txt","r"))==NULL)
     {
         
         printf("打开文件失败");
         exit(0); 
     }
//下面是自己写的只想检验文件里面有没有数据。
    fread(p2,LEN,1,fp);
    printf("%s-%s-%s-%d-%d-%d-%d",p2->num,p2->name,p2->major,&p2->classNo,&p2->score[0],&p2->score[1],&p2->score[2]);
    fclose(fp);
}


运行结果

img

  • 写回答

3条回答 默认 最新

  • 信仰869 2021-09-07 20:44
    关注

    hello,又遇见了
    这个输出你不能这么输出,你直接%s就行,因为读出来是一个字符串
    p2已经不是曾经的p2了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月14日
  • 已采纳回答 9月14日
  • 创建了问题 9月7日

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序