2301_76905872 2023-04-29 14:44 采纳率: 80%
浏览 30

为什么我的if循环没有进去过,而且while循环好像进入了一个死循环


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

typedef struct book{
    char name[5];
    char id[8];        //存八位编号
    int loaned;        //借出
    int num;        //总数
    double price;
    char publisher[5];
    char author[5];
    struct book*next;
}book;

typedef struct student{
    char id[8];
    char name[5];
    int overdue;        //逾期数
    char borrow_book_name[5][8];    //借书数,最大为5,用编号存
    int borrow_book_num;
    struct student*next;
}student;


book* Initialisation_book(){
    
    book *tail=NULL,*Head=NULL,*sd;
    FILE*fp=NULL;
    fp=fopen("library.dat","r");
    if(fp==NULL){
        printf("打开文件失败!");
        exit(1);
    }
    while(!feof(fp)){
        sd=(book*)malloc(sizeof(book));
        sd->next=NULL;
        fread(sd,sizeof(book),1,fp);
        //    printf("%s\n",sd->name);
        if(Head){
            tail->next=sd;
            tail=tail->next;
        }else{
            Head=sd;
            tail=sd;
        }
    }
    tail=NULL;
    return Head;
}
student*Initialisation_student(){
    student *tail=NULL,*Head=NULL,*sd;
    FILE*fp=NULL;
    fp=fopen("student.dat","r");
    if(fp==NULL){
        printf("文件打开失败!");
        exit(1);
    }
    while(!feof(fp)){
        sd=(student*)malloc(sizeof(student));
        sd->next=NULL;
        fread(sd,sizeof(student),1,fp);
        if(Head){
            tail->next=sd;
            tail=tail->next;
        }else{
            Head=sd;
            tail=sd;
        }
    }
    tail=NULL;
    return Head;
}
/×udent.dat里面有
//"123456","asd",1,"格林",1
/Pbrary.dat里面有
//“asd”,“1001”,1,5,56,“yangguang”,“huangyi”
//Head是图书馆,borrow_book是要借的书的编号,Student是借书的同学的指针
void borrow(book*Head,char*borrow_book,student*Student){
    book*pre=Head;
    while(pre){
        if(strcmp(pre->id,borrow_book)==0){        //if这一步没进去过,而且一直循环没出来
            pre->loaned++;
            strcpy(Student->borrow_book_name[Student->borrow_book_num],borrow_book);
            break;
        }
        pre=pre->next;
    }
    printf("借书成功啦!");
}

int main(){
//    student sd = {"123456","asd",1,"格林",1};
//    FILE*fp=NULL;
//    fp=fopen("student.dat","w");
//    fwrite(&sd,sizeof(student),1,fp);

    book *Head=Initialisation_book();
    student*Student=Initialisation_student();
    borrow(Head,"1001",Student);
    
    return 0;
}
  • 写回答

3条回答 默认 最新

  • 寒意漫彻山川 2023-04-29 15:29
    关注

    head你命为null了,下面if里面又是用的head,所以不进if;
    改成!head

    评论

报告相同问题?

问题事件

  • 创建了问题 4月29日

悬赏问题

  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战