| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 467 人关注过本帖
标题:C 这是一个我的员工工资管理系统的部分代码 麻烦高手帮找错
只看楼主 加入收藏
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:5 
C 这是一个我的员工工资管理系统的部分代码 麻烦高手帮找错
这是把文件添加到链表里面,我分割出读出数据并添加那段 并且打印出来  ,但是运行直接程序没反应




#include<stdio.h>
#include<stdlib.h>
void 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(struct clerk));
     readToLink(head);
     print(head);
 }
void readToLink(struct clerk* head_)
{
    //printf("%d\n",sizeof(*info_));
    FILE* a;
    struct clerk* p=NULL,*pr=NULL;
    //printf("%d\n",sizeof(*head_));
    head_=(struct clerk*) malloc(sizeof(struct clerk));
    //printf("%d\n",sizeof(*head_));
    head_->next=NULL;
    //printf("%d\n",head_);//测试p
    if((a=fopen("jia.txt","a+"))==0)
        printf("fail to open the file!\n");
        p=head_ ;//保存当前节点的指针//head_是头指针

    do
    {
        pr=(struct clerk*) malloc(sizeof(struct clerk));
        fscanf(a,"%10d%10c%2d%10c%6f",&pr->clerkNum,&pr->name,pr->age,&pr->position,&pr->salaries);//按数据块读入文件//按数据块读入文件
        //printf("%d\n",sizeof(*p));//测试p
        
        if(p==NULL)
        {
        printf("No enough memory to allocate!\n");
            exit(0);
        }
        pr=p->next;
        p=pr;
        p->next=NULL;//尾节点
        //pr=pr->next;//让pr指向下一个节点(但是下一个节点是否分配内存?,next指向了该类型 但是要通过malloc函数申请内存,)
        //printf("%d\n",pr->age);
    }while(!feof(a));
        fclose(a);

        
}


void print(struct clerk* head)
{
    while(head->next!=NULL)
    {
        printf("%10d %10c %2d %10c %6f\n",head->clerkNum,head->name,head->age,head->position,head->salaries);
        head=head->next;
    }
}
搜索更多相关主题的帖子: position void head include 
2012-04-03 19:48
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:20 
main()
{
     struct clerk*head=NULL;
     readToLink(head);    //这里,调用前head是Null ,要在readToLink里面改变head的值就要传入head的地址或者返回头节点
     print(head);
}

总有那身价贱的人给作业贴回复完整的代码
2012-04-03 20:12
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 2楼 embed_xuel
o,知道了  head虽然是个指针,但是待会更改的是head这个变量的内容,而不是head指向的内容,就要传一个head的地址过去,弄成head=readToLink(&head);。
但是不对;
还有我想问个问题:我在主函数定义了struct clerk*head=NULL的时候,我测试了下,head指向的空间已经被分配内存了,为什么在下面还要继续申请内存呢
2012-04-03 21:25
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 3楼 lusvan
看清楚我说的话,"改变head的值就要传入head的地址或者返回头节点",我用的是"或者",
head=readToLink(&head); 你不是乱搞吗?简单点的方法:head=readToLink(head);。
另一种方法:readToLink(&head);这样还需要改readToLink函数内部实现

总有那身价贱的人给作业贴回复完整的代码
2012-04-03 21:57
lusvan
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2012-4-3
收藏
得分:0 
回复 4楼 embed_xuel
o,那个我懂了 ,现在我的问题是 我的程序运行不了,我又修改了一下 我现在的程序能说服我自己了,但是运行不了;我给你看看我修改的的麻烦帮看一下,注释有些多我都是用来测试的
#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(struct clerk));
     head=readToLink(head);
     print(head);
 }
struct clerk* readToLink(struct clerk* head_)
{
    //printf("%d\n",sizeof(*info_));
    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_);//测试p
    if((a=fopen("jia.txt","a+"))==0)
        printf("fail to open the file!\n");
        //p=head_ ;//保存当前节点的指针//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;
        //p->next=NULL;//尾节点
        pr=pr->next;//让pr指向下一个节点(但是下一个节点是否分配内存?,next指向了该类型 但是要通过malloc函数申请内存,)
        //printf("%d\n",pr->age);
    }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-03 22:47
混乱代码
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-6-21
收藏
得分:0 
可以把全部的 借我用用嘛~~·
2016-06-22 08:52
快速回复:C 这是一个我的员工工资管理系统的部分代码 麻烦高手帮找错
数据加载中...
 
   



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

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