cxk521aoligei
2021-09-07 19:52
采纳率: 100%
浏览 65

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了

    已采纳该答案
    打赏 评论
  • Monsters691 2021-09-07 20:30

    这问题很常见应为txt的编码不一样,你可以试试在你的文件夹建立一个txt的然后另存为新的txt编码格式为 ANSI不要 utf-8,只要将你的文件保存来这里就没问题了

    打赏 评论
  • orange4reg 2021-09-07 22:43

    直接数据保存肯定是乱码啦,你不想要乱就字符串格式保存。你这样保存没有问题,只要写入和读取的大小保持一致,数据结构能对应的,那么就没有问题

    打赏 评论

相关推荐 更多相似问题