| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1420 人关注过本帖
标题:文件无法读入,调试时需要设置文件路径 ,不会是设置,不知道出现这种情况该 ...
只看楼主 加入收藏
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
结帖率:81.82%
收藏
已结贴  问题点数:20 回复次数:19 
文件无法读入,调试时需要设置文件路径 ,不会是设置,不知道出现这种情况该怎么办,求支招!!!
程序代码:
好像是fscanf那里出错了,调试时出现find source;please enter the path for fscanf.c 不知道怎么办,怎么进入为fscanf.c设置的路径
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#define NULL 0
struct student
{
    int num;
    char name[10];
    float score[3];
    struct student *next;
};
typedef struct student stu;
void main()
{
    stu *creat(int a);//创建节点数为a的链表;
    stu *paixu(stu *head);
    void print(stu *head);//输出链表
    stu *head;int n=4,del_num=1;
    head=creat(n);
    head=paixu(head);
    print(head);
   

}

stu *creat(int a)//创建节点数为a的链表;
{
    FILE *fp;
    stu *head,*p,*q;int n=0;
    p=q=(stu*)malloc(sizeof(stu));
    fp=fopen("E:\\1.txt","w");
    if(fp=NULL)
    {
        printf("******找不到文件*********\n");
        exit(0);
    }
    printf("******输入学生信息*********\n");
    fscanf(fp,"%d%s%f%f%f",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
    head=NULL;
    while(n<a)
    {
        n++;
        if(n==1) head=p;
        else q->next=p;
        q=p;
        p=(stu*)malloc(sizeof(stu));
        printf("******输入学生信息*********\n");
        fscanf(fp,"%d%s%f%f%f",&p->num,p->name,&p->score[0],&p->score[1],&p->score[2]);
    }
    fclose(fp);
    q->next=NULL;
    return head;
}
void print(stu *head)//输出链表
{
    FILE *fp;
    stu *p;
    p=head;
    fp=fopen("E:\\2.txt","r");
    if(fp=NULL)
    {
        printf("******找不到文件*********\n");
        exit(0);
    }
    printf("******输出链表*********\n");
    while(p!=NULL)
    {

        fprintf(fp,"   num=%d  name=%s  score[0]=%f  score[1]=%f  score[2]=%f  next=%d\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->next);
        p=p->next;

    }
    printf("******输出结束*********\n");
    fclose(fp);
}
//链表排序,keyword为num;
stu *paixu(stu *head)
{
    stu *p,*t,*r,*head1;
    if(head==NULL) return 0;
    head1=(stu*)malloc(sizeof(stu));
    p=head;t=r=head1;
    t->num=p->num;
    strcpy(t->name,p->name);
    t->score[0]=p->score[0];
    t->score[1]=p->score[1];
    t->score[2]=p->score[2];
    t->next=NULL;
    p=p->next;
    while(p!=NULL)
    {
        while(t->num<p->num&&t!=NULL)
        { r=t;t=t->next;}
        if(t==head1)
        {
            head1=p;p->next=t;
        }
        if(t==NULL)
        {
            t->next=p;p->next=NULL;
        }
        else
        {
            r->next=p;p->next=t;
        }
        p=p->next;
    }
    return head1;
}
2014-10-12 19:43
soulmate1023
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:256
专家分:831
注 册:2014-9-23
收藏
得分:3 
你的fscanf函数用错了,首先,fscanf函数是将fp中的文件以你定义的格式输出到后面的变量中,不是和scnaf一样,直接从键盘输入就会输入到文件的,
其次,如果将fscanf改为fprintf也不对,因为这个函数是将变量中的数输出到文件中,在你这个程序中,变量中根本就没有东西,所以肯定是错误的
最后,文件是放在外存上的,和我们平时操作的内存是有区别的,不能用一个思路
2014-10-14 22:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你用的什么运行环境?

授人以渔,不授人以鱼。
2014-10-14 23:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
    if(fp=NULL)
    {
        printf("******找不到文件*********\n");
        exit(0);
    }

你这个判断想干嘛?

授人以渔,不授人以鱼。
2014-10-14 23:25
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 4 楼 TonyDeng
版主我用的是visualc++6.0,if(fp==null)是用来判断这个文件是否存在,如果不存在打不开者退出程序;
2014-10-15 19:24
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 2 楼 soulmate1023
我不是很明白  fscanf不是可以从文件读入吗,
2014-10-15 19:27
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 4 楼 TonyDeng
  我等号写成赋值符号了

2014-10-15 19:28
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 4 楼 TonyDeng
怪不得一直找不到文件了原来文件指针一直指向空,但是修改后还是无法读取文件内容怎么回事,
2014-10-15 19:38
风车转风车89
Rank: 2
等 级:论坛游民
帖 子:125
专家分:45
注 册:2014-9-15
收藏
得分:0 
回复 4 楼 TonyDeng
版主我简单的调试了一下,发现fscanf可以正常读入,但是在执行paixu函数式在大循环while(p!=NULL)时的最后一句p=p->next;没起作用p一直指向头结点head的第二个节点,文件2txt,没有数据写入;排序的思想是:新建一条链,把原链解开,先把第一个节点数据放到新节点,然后依次解开原链,放到新链合适的位子;最后返回新链的头地址
2014-10-15 20:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你对链表的理解不清晰。把你的数据文件给我看看。

授人以渔,不授人以鱼。
2014-10-15 21:20
快速回复:文件无法读入,调试时需要设置文件路径 ,不会是设置,不知道出现这种 ...
数据加载中...
 
   



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

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