| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 674 人关注过本帖
标题:输出不正常,求各位高手帮助
只看楼主 加入收藏
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
 问题点数:0 回复次数:10 
输出不正常,求各位高手帮助
题不是很难,读入一系列数据,姓名,ID,年级,并存在数组中。不过在使用搜索的时候发现所有的sur_name和given_name指向最后一个数据,不知为何?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>



typedef struct
{
    char *sur_name;
    char *given_name;
    int id;
    int age;


}str;

str* struct_setup(char surname[32], char givenname[32], int person_id, int person_age)              /*use the function to mallocs a struct */
{
    str *s;
    s=(str *)malloc(sizeof(str));
    s->sur_name = (char *)malloc(sizeof(32));
    s->given_name = (char *)malloc(sizeof(32));
    s->sur_name = surname;
    s->given_name = givenname;
    s->id = person_id;
    s->age = person_age;

    return s;

}



str** array_setup()            /*use the function to create a array of pointers */
{

    str **array;
    array = (str **)malloc(sizeof(str*)*10);
    return array;

}

str* array_add(str *a,str **b,int num,FILE *out)         /*use the function to add the new struct pointers to the array */
{

    if (num<10)
    {
        b[num]=a;
        //fprintf(out,"XXXsur_name=%s given_name=%s id=%d age=%d\n\n",b[num]->sur_name,b[num]->given_name,b[num]->id,b[num]->age);
    }
    if (num>=10)
    {
        fprintf(out,"\narray is full!\n");
        fprintf(out,"num=%d\n",num);
        //exit(0);
    }


}


void search_by_id(int temp3,str **q,int num,FILE *out)          /*use the function to search by id */
{

    int i,n=0;

    for (i=0;i<num;i++)
    {
        if (temp3==q[i]->id)
        {
            fprintf(out,"Search result by id will be:\n");
            fprintf(out,"sur_name=%s given_name=%s id=%d age=%d\n\n",q[i]->sur_name,q[i]->given_name,q[i]->id,q[i]->age);
            n++;
        }
    }

    if (n==0) fprintf(out,"Nothing matches:%d\n",temp3);

}

















int main(int argc, char* argv[])
{

    int num=0,n,i;
    str **q=array_setup();
    FILE *fp=fopen("person_data","r");
    FILE *out=fopen("output","w");
    char temp1[32],temp2[32];
    int temp3,temp4;
    while (!feof(fp))
    {
        fscanf(fp,"%s %s %d %d",temp1,temp2,&temp3,&temp4);
        str *p = struct_setup(temp1,temp2,temp3,temp4);
        array_add(p,q,num,out);
        num++;
        fprintf(out,"num=%d\n",num);
        fprintf(out,"YYYsur_name=%s given_name=%s id=%d age=%d\n\n",q[num-1]->sur_name,q[num-1]->given_name,q[num-1]->id,q[num-1]->age);

    }

    fclose(fp);


    FILE *search_id=fopen("id","r");
    while (!feof(search_id))
    {
        fscanf(search_id,"%d",&temp3);
        search_by_id(temp3,q,num,out);


    }
    fclose(id);
    fclose(out);

    return 0;

}
搜索更多相关主题的帖子: include function 搜索 
2012-10-27 16:58
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
不过在使用搜索的时候发现所有的sur_name和given_name指向最后一个数据,不知为何?
还有,如果在while循环结束后加这么一段代码检测读入情况
for(i=0;i<num;i++)
printf("sur_name=%s given_name=%s id=%d age=%d\n\n",q[i]->sur_name,q[i]->given_name,q[i]->id,q[i]->age);

发现id和age都正确读入,不过q[i]->sur_name,q[i]->given_name全部指向person_data的最后一个数据,Laaa和Looo,求各位大神指教?person_data如下



Aaaa
Aooo
1
20

Baaa
Booo
2
21

Caaa
Cooo
3
20

Daaa
Dooo
4
20

Faaa
Fooo
5
19

Gaaa
Gooo
6
23

Haaa
Hooo
7
32

Jaaa
Jooo
8
27

Kaaa
Kooo
9
25

Laaa
Looo
10
30
2012-10-27 17:06
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
fclose(id);这个应该是fclose(search_id);
不好意思
2012-10-27 17:13
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
没人能够帮帮我吗?
2012-10-27 19:00
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
顶起来,有没有人可以帮我,呜呜
2012-10-27 19:27
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
顶起来
2012-10-27 19:45
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
顶起来
2012-10-27 20:19
zhang123580
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-10-27
收藏
得分:0 
q[i]->sur_name,q[i]->given_name是字符串,和其他几个处理方式不一样,明白了吗?


2012-10-27 21:14
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
回复 8楼 zhang123580
非常感谢,您能否说的具体一点
2012-10-28 02:23
tangchensr
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-31
收藏
得分:0 
已经解决,定义一个指向指针的指针作为输入即可。
2012-10-28 03:56
快速回复:输出不正常,求各位高手帮助
数据加载中...
 
   



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

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