| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 978 人关注过本帖
标题:一个单向链的问题,为什么输出不正常,谢谢!
只看楼主 加入收藏
ericwu1975
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-8-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
一个单向链的问题,为什么输出不正常,谢谢!
#include <stdio.h>
#include <stdlib.h>
struct students
{
    char name[20];
    int age;
    char gender;
    struct students *next;
};
struct students *create();
void printS();
int main (void)
{
    struct students *head;
    head=NULL;
    head=create(head);
    printS(head);
    return 0;   
}
struct students *create(struct students *head)
{
    struct students *tail,*p;
    int i=1;
    char ext[20]="无";
    tail=(struct students *)malloc(sizeof(struct students));
    printf("请输入学生信息,如果姓名为 \"无\" 退出!存放地址为P_%d=add%p\n",i,tail);
    printf("输入格式为了姓名\t年龄\t姓别.\n");
    scanf("%s%d%c",&tail->name,&tail->age,&tail->gender);
    tail->next=NULL;
    while(strcmp(ext,tail->name))
    {
        if (head==NULL)
        head=tail;
        else
        {
            tail->next=p;
            tail=p;
        }
        p=(struct students *)malloc(sizeof(struct students));
        i=i+1;
            //printf("输入格式为了姓名\t年龄\t姓别.\n");
    printf("请输入学生信息,如果姓名为 \"无\" 退出!存放地址为P_%d=add%p\n",i,tail);
    scanf("%s %d %c",&p->name,&p->age,&p->gender);
        
    }
    tail->next=NULL;
    printf("输入学生信息结束!\n\n");
    return head;   
}
void printS(struct students *head)
{
    struct students *temp;
    temp =head;
    printf("输入学生信息为:\n");
    printf("姓名\t年龄\t姓别.\n");
    while(temp)
    {
        printf("%s\t%d\t%c\n",&temp->name,&temp->age,&temp->gender);
        temp=temp->next;
    }
    printf("打印学生信息结束!\n\n");
}
搜索更多相关主题的帖子: include return create 
2016-08-21 13:38
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:20 
以下是引用ericwu1975在2016-8-21 13:38:10的发言:

#include <stdio.h>
#include <stdlib.h>
struct students
{
    char name[20];
    int age;
    char gender;
    struct students *next;
};
struct students *create();
void printS();
                        //和子函数不一样。
int main (void)
{
    struct students *head;
    head=NULL;
    head=create(head);
    printS(head);
    return 0;   
}
struct students *create(struct students *head)
{
    struct students *tail,*p;
    int i=1;
    char ext[20]="无";
    p=tail=(struct students *)malloc(sizeof(struct students));        //这里加上p
    printf("请输入学生信息,如果姓名为 \"无\" 退出!存放地址为P_%d=add%p\n",i,tail);
    printf("输入格式为了姓名\t年龄\t姓别.\n");
    scanf("%s%d%c",&tail->name,&tail->age,&tail->gender);  //scanf("%s%d*c%c",tail->name,&tail->age,&tail->gender);
    tail->next=NULL;
    while(strcmp(ext,tail->name))  //这里改用性别作逻辑条件更简单。而且,strcmp的头文件string.h也没看到。
    {
        if (head==NULL)
        head=tail;
        else
        {
            tail->next=p;            
            tail=p;
        }
        p=(struct students *)malloc(sizeof(struct students));    //最后一次开辟的空间是为了结束用,那么要while循环外加一句free(p);
        
        i=i+1;
            //printf("输入格式为了姓名\t年龄\t姓别.\n");
    printf("请输入学生信息,如果姓名为 \"无\" 退出!存放地址为P_%d=add%p\n",i,tail);
    scanf("%s %d %c",&p->name,&p->age,&p->gender);        //同上面那个scanf一样加上%*c
        
    }
    free(p);        //加上这句
    tail->next=NULL;
    printf("输入学生信息结束!\n\n");
    return head;   
}
void printS(struct students *head)
{
    struct students *temp;
    temp =head;
    printf("输入学生信息为:\n");
    printf("姓名\t年龄\t姓别.\n");
    while(temp)                    
    {
       printf("%s\t%d\t%c\n",&temp->name,&temp->age,&temp->gender);        //取址符去掉。
        temp=temp->next;
    }
    printf("打印学生信息结束!\n\n");
}



[此贴子已经被作者于2016-8-21 15:09编辑过]

2016-08-21 14:08
ericwu1975
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-8-7
收藏
得分:0 
改好了,谢谢并且存盘。


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

struct students
{
    char name[20];
    int age;
    char gender;
    struct students *next;
};
struct students *create();
void printS();                       
int main (void)
{
    struct students *head;
    head=NULL;
    head=create(head);
    printS(head);
    return 0;   
}
struct students *create(struct students *head)
{
    struct students *tail,*p;
    int i=1;
    char ext[20]="无";
    p=tail=(struct students *)malloc(sizeof(struct students));      
    printf("请输入学生信息,如果姓名为 \"无\" 退出!存放地址为P_%d=add%p\n",i,tail);
    printf("输入格式为:\n姓名\t年龄\t姓别.\n");
    scanf("%s %d %c%*c",&tail->name,&tail->age,&tail->gender);  //scanf("%s%d*c%c",tail->name,&tail->age,&tail->gender);
    tail->next=NULL;
    while(strcmp(ext,tail->name))  
    {
        if (head==NULL)
        head=tail;
        else
        {
            p->next=tail;            
            p=tail;
        }
        tail=(struct students *)malloc(sizeof(struct students));   
        
        i=i+1;
            //printf("输入格式为了姓名\t年龄\t姓别.\n");
    printf("请输入学生信息,如果姓名为 \"无\" 退出!存放地址为P_%d=add%p\n",i,tail);
    scanf("%s %d %c%*c",&tail->name,&tail->age,&tail->gender);      
        
    }
    free(tail);      
    p->next=NULL;
    printf("输入学生信息结束!\n\n");
    return head;   
}
void printS(struct students *head)
{
    struct students *temp;
    temp =head;
    FILE *f;
    f=fopen("stu.txt","a+");
    printf("输入学生信息为:\n");
    fprintf(f,"输入学生信息为:\n");
    printf("姓名\t年龄\t姓别.\n");
    fprintf(f,"姓名\t年龄\t性别.\n");
    while(temp)                    
    {
       printf("%s\t%d\t%c\n",temp->name,temp->age,temp->gender);        //取址符去掉。
fprintf(f,"%s\t%d\t%c\n",temp->name,temp->age,temp->gender);
        temp=temp->next;
    }
    printf("打印学生信息结束!\n\n");
    fclose(f);
    fflush(f);
}

[此贴子已经被作者于2016-8-22 01:40编辑过]

2016-08-22 01:37
快速回复:一个单向链的问题,为什么输出不正常,谢谢!
数据加载中...
 
   



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

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