海绵宝宝最爱派大星 2021-06-18 15:28 采纳率: 0%
浏览 128

为什么c语言中我打的代码文件打不开,路径没有问题呀

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
struct book
{
    int id;//书的编码// 
    char name[100];//书名// 
    char publish[100];//出版社// 
    char author[100];//作者// 
    int store;//目前可借阅多少本 
    int total;//馆藏多少本 
    int user;//借走的人数 
    int day;//借的天数// 
};
//链表的节点类型//
struct Node
{
    struct book data;//链表节点存储的数据//
    struct Node* pNext; //保存下一个节点的地址// 
};
//准备一个创建链表节点的函数// 
struct Node* creatNode(struct book* pData);
//添加一个节点到链表末尾
void  appendNode(struct Node** root,struct book* pData);
//遍历链表并输出 
void travel(struct Node* root); 
//返回root链表中第n个节点的地址
struct Node* findNodeByPos(struct Node* root,int n);
//删除root链表中第n个节点 
void deleteNode(struct Node** root,int n);
//删除整个链表 
void deleteList(struct Node** root);

void menu();
void show_book();
void add_book();
void delete_book();
void change_bookinfor();
void cheek_book();
void borrow_book();
void return_book();


int main()
{
//从文件中读取数据到链表中//
    FILE *fp;
    fp=fopen("D:/书籍.txt","r");
    if(fp==NULL)
    {
        printf("打开文件失败!\n");
        exit(0);
    }
    struct Node** root;
    struct Node* creatNode(struct book* pData);
    struct book pData;
    char s[100];
    fscanf(fp,"%d %s %s %s %d %d",&pData.id,pData.name,pData.author,pData.publish,&pData.total,&pData.user);
    fscanf(fp,"%d",&pData.id);
    printf("%d\n",pData.id);
    appendNode(root,&pData);
//根据用户的输入来改变数据//
    menu();
//把链表中的数据写入到文件中(覆盖掉了文件中之前的数据)// 
    while(1);
    return 0;    
}
    
 //创建一个链表节点// 
struct Node* creatNode(struct book* pData)
{
    struct Node* pNew;
    pNew=(struct Node*)malloc(sizeof(struct Node));//分配内存//
    if(NULL==pNew)
    return NULL;//说明创建链表节点失败// 
        pNew->pNext=NULL;//pNew是一个指针 
        //将数据拷贝到新节点里面// 
        strcpy(pNew->data.name,pData->name);
        strcpy(pNew->data.publish,pData->publish);
        strcpy(pNew->data.author,pData->author);
        pNew->data.day=pData->day;
        pNew->data.id=pData->id;
        pNew->data.store=pData->store;
        pNew->data.total=pData->total;
        pNew->data.user=pData->user;
        return pNew;
    
}
void menu()
{
    int n;
    while(1)
    {
        //system("cls");//清屏 
        printf("----------浙大宁波理工大学图书管理系统----------\n");
        printf("1-增加图书信息\n");
        printf("2-删除图书信息\n");
        printf("3-修改图书信息\n");
        printf("4-查找图书\n");
        printf("5-借阅书籍\n");
        printf("6-还书\n"); 
         printf("7-退出\n");
        printf("请选择:");
        scanf("%d",&n); //输入其他数字,需要来一个错误的检查 
        switch(n)
        {
            case1:show_book(); break;            
            case2:add_book(); break;
            case3:delete_book(); break;
            case4:change_bookinfor(); break;
            case5:cheek_book(); break;
            case6:borrow_book(); break;
            case7:return_book(); break;
            case8:exit(1); break;
            default:break;    
        }
    }
}
void show_book()
{
    //打开文件//
    FILE* fp;//定义文件指针 //
    if((fp=fopen("D:\\书籍.txt","rb"))==NULL)
    {
        printf("打开文件失败!\n");
        Sleep(3000);//让输出的话停留三秒钟在清屏 
        exit(0); 
    }
    else
    {
        // 读取文件内容并存放到链表或数组中 
        struct Node* pList=NULL;//一开始有一个链表里面为空
        int r;
        struct book temp;//临时存储一个书籍的数据 
        while(1)
        {
            r=fread(&temp,1,sizeof(struct book),fp);
            if(r<=0)//没读到 
            {
                break;
            }
            else//读到了一本书的信息
            {
                //创建一个链表节点
                struct Node* creatNode(struct book* pData);
                //把链表节点添加到链表中 
                appendNode(&pList,&temp);
            }
        } 
        //关闭文件
        fclose(fp);
        //遍历链表或者数组并输出 
        travel(pList);
        //删除整个链表
        deleteList(&pList);
    }
    
     
}
void add_book()
{
        //打开文件//
    FILE* fp;//定义文件指针 //
    struct book temp;//临时存储一个书籍的数据 
    struct Node* pList=NULL;//一开始有一个链表里面为空
    int r;
    if((fp=fopen("D:\\书籍.txt","rb"))==NULL) 
    {
        printf("系统中没有书籍!\n");
        Sleep(3000);//让输出的话停留三秒钟在清屏 
        exit(0); 
    }
    else
    {
        // 读取文件内容并存放到链表或数组中 
        while(1)
        {
            r=fread(&temp,1,sizeof(struct book),fp);
            if(r<=0)//没读到 
            {
                break;
            }
            else//读到了一本书的信息
            {
                //创建一个链表节点
                struct Node* creatNode(struct book* pData);
                //把链表节点添加到链表中 
                appendNode(&pList,&temp);
            }
        } 
        //关闭文件
        fclose(fp);
        }
    printf("请输入要增加的图书的id:");
    scanf("%d",temp.id); 
    printf("请输入要增加的图书的名字:");
    scanf("%s",temp.name);
    printf("请输入要增加的图书的作者:");
    scanf("%s",temp.author);
    printf("请输入要增加的图书的出版社:");
    scanf("%s",temp.publish);
    printf("请输入要增加的图书的可借阅数量:");
    scanf("%d",temp.store);
    printf("请输入要增加的图书的馆藏:");
    scanf("%d",temp.total);
    printf("请输入要增加的图书的可借阅天数:");
    scanf("%d",temp.day);
    
    appendNode(&pList,&temp);
    
        //打开文件//
    if((fp=fopen("D:\\c语言大作业\\书籍.txt","wb"))==NULL) 
    {
        printf("打开文件失败!\n");
        Sleep(3000);//让输出的话停留三秒钟在清屏 
        exit(0); 
    }
    else//循环把链表中的东西写到文件里 
    {
        struct Node* pTemp=pList;
        while(pTemp)
        {
            fwrite(&(pTemp->data),1,sizeof(struct book),fp);
            pTemp=pTemp->pNext;
        }
    }
    fclose(fp);
    deleteList(&pList);
}
void delete_book()
{
    
}
void change_bookinfor()
{
    
}
void cheek_book()
{
    
}
void borrow_book()
{
    
}
void return_book()
{
    
}
//添加一个节点到链表末尾 
void  appendNode(struct Node** root,struct book* pData)
{
    if(root==NULL) return;
    if(*root==NULL)//传进来一个空链表 
    {
        *root=creatNode(pData);//新的节点 
        return;
    }
    struct Node* pTemp=*root;
    
    //让pTemp指向链表最后一个节点 
    while(pTemp->pNext) 
    {
        pTemp=pTemp->pNext;
    }
    //把新节点添加到pTemp后面 
    pTemp->pNext=creatNode(pData);
}

//遍历链表并输出 
void travel(struct Node* root)
{
    if(root==NULL) return;
    while(root)
    { 
        printf("id:%d",root->data.id);
        printf("书名:%s",root->data.name);
        printf("作者:%s",root->data.author);
        printf("出版社:%s",root->data.publish);
        printf("可借阅:%d",root->data.store);
        printf("馆藏:%d",root->data.total);
        printf("借走人数:%d",root->data.user);
        printf("可借天数:%d",root->data.day);
        root=root->pNext;
    }
    printf("------------------------------------------\n");
}

//返回root链表中第n个节点的地址
struct Node* findNodeByPos(struct Node* root,int n)
{
    int i;
    if(n<0) return NULL;
    if(root==NULL) return NULL;
    if(n==0) return root;//删掉第一个 
    for(i=0;i<n;i++)
    {
        if(root==NULL) return NULL; 
        root=root->pNext;
    }
    return root;
}

//删除root链表中第n个节点  n从0开始 
void deleteNode(struct Node** root,int n)
{
    if(root==NULL) return;
    if(*root==NULL) return;
    if(n<0) return;
    struct Node* pDel=*root;
    struct Node* pDelPret=NULL;//要删的节点的前一个节点 
    if(n==0)
    {
        *root= pDel->pNext;
        free(pDel);//释放内存 
        return;//删掉第一个 
    }
    pDel=findNodeByPos(*root,n);//删第n个 
    pDelPret=findNodeByPos(*root,n-1); 
    pDel=pDelPret->pNext;//这个是要山的节点 
    if(pDel==NULL) return;
    pDelPret->pNext=pDel->pNext;//pDel的前一个的next指针指向pDel的下一个节点
    free(pDel);//释放内存
    return; 
}

//删除整个链表 
void deleteList(struct Node** root)
{
    while(1)
    {
        if(NULL==*root) return;
        deleteNode(root,0);
    }
}

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2021-06-18 15:31
    关注

    fp=fopen("D:/书籍.txt","r");改成fp=fopen("D:\\书籍.txt","r");

    评论

报告相同问题?

悬赏问题

  • ¥15 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!