| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 624 人关注过本帖
标题:fopen函数和fscanf函数 链表显示不出来
只看楼主 加入收藏
蓝莓
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-12-15
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:3 
fopen函数和fscanf函数 链表显示不出来
程序代码:
#include "stdio.h"
#define FILEPATH_TRAIN     "train.txt"

typedef struct train      /*火车*/
{
    char num[15];              
    char station[15];            
    char city[15];              
    char DepartureTime[15];    
    char arrivalTime[15];     
    float price;             
    int remainTicket;          
}train;

typedef struct trainNode 
{
    struct train data;   /*火车链表的节点数据*/
    struct trainNode* next; /*指向下一节点的指针*/
}trainNode,*trainlink;     /*火车节点名  火车节点指针名*/

trainlink readTrain(char *filepath);  //读取外部火车文件内容, 返回火车链表的头指针
manlink readMan(char *filepath);      //读取外部购票人数据内容, 返回火车链表的头指针

void printfTrain(trainlink p);
void main()
{
    int meun_select();     /*菜单函数*/
    trainlink pTrain;                   //调用 删除 插入 函数时 则通过二级指针来改变链表 头结点指针 的变量值
    pTrain=readTrain(FILEPATH_TRAIN);   //读取火车文件信息
}



trainlink readTrain(char *filepath)
{
    trainlink pHead,pMov,pNew;  //头结点的指针  可移动的当前指针  新增结点的指针
    train temp;
    FILE *fp;
    if((fp=fopen("filepath","r"))==NULL)
    {
        printf("不能打开文件!\n");
        exit(1);
    }
    pMov=pHead=NULL;

    if(fp)
    {
        while(!feof(fp))
        {
            if(fscanf(fp,"%s\n%s\n%s\n%s\n%s\n%f\n%d\n\n",temp.num,temp.station,temp.city,temp.DepartureTime,
                temp.arrivalTime,&temp.price,&temp.remainTicket)==7)
            {
                pNew=(trainlink)malloc(sizeof(trainNode)); //申请新结点
                pNew->next=NULL;
                pNew->data=temp;
                if(NULL==pHead)
                    pHead=pMov=pNew;  //加入头结点
                else
                {
                    pMov->next=pNew;
                    pMov=pMov->next;
                }
            }
        }
fclose(fp);
    }
return pHead;         //返回 火车链表的头指针 如果没进入while循环体 则pHead=NULL
}

void printfTrain(trainlink p) //打印指定的车次信息
{
    printf("\n**************************厦门火车站列车信息*****************************\n");
    printf("\n|------------------------------------------------------------------------\n");
    printf("\n| 车次 |  发车时间  |  始发站  |  终点站  | 到达时间  | 票价 | 剩余票数 |\n");

    while(p!=NULL)
    {
        printf("\n| %-8s |  %-5s  |  %-7s  |  %-7s  | %-10s | ¥%6.1f | %5d |\n",p->data.num,p->data.DepartureTime,
            p->data.station,p->data.city,p->data.arrivalTime,p->data.price,p->data.remainTicket);
        p=p->next;
    }
    printf("\n|------------------------------------------------------------------------\n");
    getch();
}


为什么显示“不能打开文件!”train.txt明明有存在啊
然后我把 if((fp=fopen("filepath","r"))==NULL) 改成   if((fp=fopen("train.txt","r"))==NULL)后面链表显示不出来
2015-01-13 21:30
yahwei
Rank: 7Rank: 7Rank: 7
来 自:湖~
等 级:黑侠
威 望:3
帖 子:145
专家分:644
注 册:2011-11-10
收藏
得分:10 
回复 楼主 蓝莓
首先,filepath 是一个变量,不能加双引号。
然后,fscanf(fp,"%s\n%s\n%s\n%s\n%s\n%f\n%d\n\n"……这句里为什么要加这么多“\n”,难道数据文件里包含这么多“\n”。

[qq]949654600[/qq]
2015-01-15 12:27
蓝莓
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-12-15
收藏
得分:0 
回复 2楼 yahwei
对的呢。
这个问题我已经解决了,除了那个双引号,还有位置的错误。不过还是谢谢你^—^
2015-01-15 22:42
doudou74321
Rank: 2
等 级:论坛游民
帖 子:70
专家分:72
注 册:2014-11-5
收藏
得分:10 
回复 3楼 蓝莓
楼主,你的查找车次是怎么写的?输入字符串,一个一个的在链表的对比吗?还是用二分查找?我不会这个二分法
2015-01-16 14:30
快速回复:fopen函数和fscanf函数 链表显示不出来
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058544 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved