| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 822 人关注过本帖
标题:没办法了,真的没办法了,我哪里错了,告诉我,我一定改。
取消只看楼主 加入收藏
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:7 
没办法了,真的没办法了,我哪里错了,告诉我,我一定改。
这是逻辑错误,员工工资管理系统,我卡在把文件读取出来放入链表里面这一步,我把这一步代码切出来,单独弄一个测试程序,这是最后修改的,中间有很多测试代码,大神可以复制去运行一下分析一下,将感激不尽,情况就是运行就退出,我想知道我到底错在哪。高手们
#include<stdio.h>
#include<stdlib.h>
struct clerk* readToLink(struct clerk* head_);
void print(struct clerk* head);
struct clerk
{
    char clerkNum[10];
    char name[20];
    int  age;
    char position[10];
    char salaries[10];
    struct clerk* next;
};
 main()
 {
     struct clerk*head=NULL;
     //printf("%d\n",sizeof(*head));
     head=readToLink(head);
     print(head);
 }
struct clerk* readToLink(struct clerk* head_)
{
    FILE* a;
    struct clerk* p=head_,*pr=NULL;
    //printf("%d\n",sizeof(*head_));//测试
    //head_=(struct clerk*)malloc(sizeof(struct clerk));//测试
    //printf("%d\n",sizeof(*head_));//测试
    //printf("%d\n",head_);//测试
    if((a=fopen("jia.txt","a+"))==0)
        printf("fail to open the file!\n");
    do
    {
        pr=(struct clerk*)malloc(sizeof(struct clerk));
        if(pr==NULL)
        {
        printf("No enough memory to allocate!\n");
            exit(0);
        }
        fscanf(a,"%10d%5s%2d%10s%6f",&(pr->clerkNum),&(pr->name),&(pr->age),&(pr->position),&(pr->salaries));//按数据块读入文件//按数据块读入文件
        //printf("%d\n",sizeof(*p));//测试p
        p->next=pr;
        p=pr;
        pr=pr->next;//让pr指向下一个节点(但是下一个节点是否分配内存?,next指向了该类型 但是要通过malloc函数申请内存,)
    }while(!feof(a));
    pr->next=NULL;

    return head_;
        fclose(a);

        
}


void print(struct clerk* head)
{
    while(head->next!=NULL)
    {
        printf("%10d %5s %2d %10s %6f\n",head->clerkNum,head->name,head->age,head->position,head->salaries);
        head=head->next;
    }
}
搜索更多相关主题的帖子: head 测试 position include 
2012-04-04 00:40
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
下面的是没有注释的

#include<stdio.h>
#include<stdlib.h>
struct clerk* readToLink(struct clerk* head_);
void print(struct clerk* head);
struct clerk
{
    char clerkNum[10];
    char name[20];
    int  age;
    char position[10];
    char salaries[10];
    struct clerk* next;
};
 main()
 {
     struct clerk*head=NULL;
      head=readToLink(head);
     print(head);
 }
struct clerk* readToLink(struct clerk* head_)
{
    FILE* a;
    struct clerk* p=head_,*pr=NULL;
    if((a=fopen("jia.txt","a+"))==0)
        printf("fail to open the file!\n");

    do
    {
        pr=(struct clerk*)malloc(sizeof(struct clerk));
        if(pr==NULL)
        {
        printf("No enough memory to allocate!\n");
            exit(0);
        }
        fscanf(a,"%10d%5s%2d%10s%6f",&(pr->clerkNum),&(pr->name),&(pr->age),&(pr->position),&(pr->salaries));//按数据块读入文件//按数据块读入文件

        p->next=pr;
        p=pr;
        pr=pr->next;//让pr指向下一个节点(但是下一个节点是否分配内存?,next指向了该类型 但是要通过malloc函数申请内存,)
    }while(!feof(a));
    pr->next=NULL;

    return head_;
        fclose(a);

        
}


void print(struct clerk* head)
{
    while(head->next!=NULL)
    {
        printf("%10d %5s %2d %10s %6f\n",head->clerkNum,head->name,head->age,head->position,head->salaries);
        head=head->next;
    }
}
2012-04-04 00:43
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 3楼 embed_xuel
这一题硬让我们用数据结构
2012-04-04 10:37
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 6楼 embed_xuel
那么把它提前应该可以了吧,谢谢啊
2012-04-04 11:12
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 5楼 embed_xuel
pr=pr->next;这一句删了
2012-04-04 11:15
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 7楼 TonyDeng
您看 ,我这样可以吗?我前面再把main()里面修改为struct clerk* head=(struct clerk*)malloc(struct clerk_);head=readToLink(head);print(head);因为我的目的是传到readToLink(struct clerk* head_)以后,我把head_赋值给p,那么head_和p就同时指向一段内存(我用来标记为头指针,待会返回head_,就是返回一个单链表)然后移动pr通过循环,一次次给pr申请空间建立新链表节点,并且通过p=p->next把新建节点连到上一节点,直到文件读完。动态数据结构这一方面我一直很头疼,在学校上学期学了一学期,最后的动态数据结构草草收尾,自己弄了大半天,用的不是很熟悉,不发帖真不知道落后啊。。。谢谢了
2012-04-04 11:27
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 4楼 embed_xuel
我在main()里面第一句改成:struct clerk* head=(struct clerk*)malloc(struct clerk);
2012-04-04 11:29
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 6楼 embed_xuel
刚刚是急着弄程序 ,看,今天弄一天了,但是我还是没有把它成功弄出来,这是我刚刚最后修改的程序,我觉得逻辑也对,就是行不通,刚刚的帖子无意冒犯,抱歉
#include<stdio.h>
#include<stdlib.h>
struct clerk* readToLink(struct clerk* head_);
void print(struct clerk* head);
struct clerk
{
    char clerkNum[10];
    char name[20];
    int  age;
    char position[10];
    char salaries[10];
    struct clerk* next;
};
 main()
 {
     struct clerk info;
     struct clerk* head;
     //("%d\n",sizeof(*head));
     head=readToLink(&info);
     print(head);
 }
struct clerk* readToLink(struct clerk* head_)
{
    FILE* a;
    struct clerk* p=head_,*pr;
    if((a=fopen("jia.txt","a+"))==0)
        printf("fail to open the file!\n");
         ;//保存当前节点的指针//head_是头指针

    do
    {
        pr=(struct clerk*)malloc(sizeof(struct clerk));
        if(pr==NULL)
        {
        printf("No enough memory to allocate!\n");
            exit(0);
        }
        fscanf(a,"%10d%5s%2d%10s%6f",pr->clerkNum,pr->name,pr->age,pr->position,pr->salaries);//按数据块读入文件//按数据块读取
        //printf("%d\n",sizeof(*p));//测试p
        p->next=pr;
        p=pr;
    }while(!feof(a));
    pr->next=NULL;
    fclose(a);
    return head_;
}
void print(struct clerk* head)
{
    struct clerk* pr=head->next;
    while(pr->next!=NULL)
    {
        //printf("%d\n",pr->age);
        printf("%10d %5s %2d %10s %6f\n",head->clerkNum,head->name,head->age,head->position,head->salaries);
        pr=pr->next;
    }
}
2012-04-04 17:01
快速回复:没办法了,真的没办法了,我哪里错了,告诉我,我一定改。
数据加载中...
 
   



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

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