| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 526 人关注过本帖
标题:[讨论][求助]链表的问题?
只看楼主 加入收藏
emcyk
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-1-7
收藏
 问题点数:0 回复次数:8 
[讨论][求助]链表的问题?

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#define NULL 0
#define LEN sizeof(struct student)

struct student /*定义一个学生考试信息的结构体*/
{char num[10];
char name[10];
int Chinese;
int math;
int English;
int sum;
int aver;
struct student *next;/*定义指向下一个结构体的指针*/
};
int n; /*用来统计考生人数的*/
char ch[10]; /*用来存放姓名的*/
struct student *creat(void) /*定义一个指向struct student的结构体指针函数*creat()用来存储考生信息.*/
{
struct student *head,*p1,*p2;/*定义三个指向struct student的结构体指针*/
n=0;
printf("input student informations:\n");
printf("input 'stop' to end:\n");
printf("input name:");
scanf("%s",ch);
head=NULL; /*给指针head赋初值*/
p1=p2=(struct student *)malloc(LEN);/*调用malloc()函数用来开辟一个新的存储单元*/
while (strcmp(ch,"stop")!=0) /*调用字符比较函数strcmp()用来判断是否继续输入*/
{p1=(struct student*)malloc(LEN);/*调用malloc()函数用来开辟一个新的存储单元*/
strcpy(p1->name,ch); /*将循环结构前面输入的姓名复制到结构体名为p1的数组name中*/
printf("input number:");
scanf("%s",p1->num);
printf("input Chinese:");
scanf("%d",&p1->Chinese);/*将输入的中文成绩存放到p1所指结构体的数组score中*/
printf("input math:");
scanf("%d",&p1->math);/*将输入的数学成绩存放到p1所指结构体的数组score中*/
printf("input English:");
scanf("%d",&p1->English);/*将输入的英语成绩存放到p1所指结构体的数组score中*/
p1->sum=p1->Chinese+p1->math+p1->English;/*计算总分 */
p1->aver=p1->sum/3;
if(n==0) head=p1;/*如果是输入第一组学生考试信息就将指针p1赋给指针head*/
else p2->next=p1;/*否则将p1赋给p2所指结构体的next指针*/
p2=p1;/*将指针p1赋给指针p2*/
n++; /*将n的值加1*/
printf("name:");
scanf("%s",ch);/*将输入的姓名存放到字符数组ch中*/
}
p2->next=NULL;/*将p2所指结构体的next指针重新赋空值*/
return (head);/*将输入的第一组学生考试信息返回*/
}
void output(struct student *head) /*定义output()函数将考生的信息从头指针所指内容开始输出*/
{struct student *p;/*定义一个指向struct student的结构体指针p*/
printf("-------------------------------------------------------------------------\n"); /*73个"-"*/
printf("---------------------* students's information *--------------------------\n");
printf("-------------------------------------------------------------------------\n");
printf("-----num------name------Chinese------math------English------sum------aver\n");
printf("-------------------------------------------------------------------------\n");
p=head;/*将头指针赋给p*/
if(head!=NULL)/*如果头指针非空则继续*/
do{printf("%8s%10s---------%4d------%4d---------%4d----%5d------%4d\n",p->num,p->name,p->Chinese,p->math,p->English,p->sum,p->aver);
printf("-------------------------------------------------------------------------\n");
p=p->next;/*将下一组考生信息的next指针赋给p*/
}while(p!=NULL);/*若指针p非空则继续,目的是把所有的考生信息都传给指针p然后输出.*/
}

void modify(char target[],struct student *mhead)
{struct student *mp;
mp=mhead;
for(;mp!=NULL;mp=mp->next)
if(strcmp(mp->num,target)==0)
{printf("%s,%s,%d,%d,%d,%d,%d\n",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);
printf("Reinputs the student information:");
scanf ("%s,%s,%d,%d,%d,%d,%d",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);
printf("%s,%s,%d,%d,%d,%d,%d\n",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);
}
}
main()
{struct student *z;
char number[10];
z=creat();
output(z);
printf("input a student's number:");
scanf("%s",number);
modify(number,z);
getch();
}
我那个修改链表的函数为什么不能实现啊?

搜索更多相关主题的帖子: 链表 
2007-01-07 09:30
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
scanf ("%s,%s,%d,%d,%d,%d,%d",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);

对不礼貌的女生收钱......
2007-01-07 10:07
渚薰
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:1132
专家分:0
注 册:2006-8-6
收藏
得分:0 

建议楼主不要用那么多级的指针引用

[此贴子已经被作者于2007-1-7 11:33:43编辑过]


个人ajax技术专题站: " target="_blank">http://www. 我不会闲你烦,只会闲你不够烦!
2007-01-07 11:32
emcyk
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-1-7
收藏
得分:0 
多谢了,“多级的指针引用”是什么意思?
2007-01-07 12:02
☆註⊙諨☆
Rank: 1
等 级:新手上路
帖 子:73
专家分:0
注 册:2006-10-7
收藏
得分:0 
以下是引用渚薰在2007-1-7 11:32:41的发言:

建议楼主不要用那么多级的指针引用


支持你哦```
多级指针指指就不知道指那里拉。


2007-01-07 12:54
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
void modify(char target[],struct student *mhead)
{struct student *mp;
mp=mhead;
for(;mp!=NULL;mp=mp->next)
if(strcmp(mp->num,target)==0)
{printf("%s,%s,%d,%d,%d,%d,%d\n",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);
printf("Reinputs the student information:");
scanf ("%s,%s,%d,%d,%d,%d,%d",mp->num,mp->name,&mp->Chinese,&mp->math,&mp->English,&mp->sum,&mp->aver);
printf("%s,%s,%d,%d,%d,%d,%d\n",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);
}
楼主这个修改信息吧!

谁有强殖装甲第二部,可以Q我460054868
2007-01-07 13:10
emcyk
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-1-7
收藏
得分:0 
以下是引用C语言学习者在2007-1-7 13:10:38的发言:
void modify(char target[],struct student *mhead)
{struct student *mp;
mp=mhead;
for(;mp!=NULL;mp=mp->next)
if(strcmp(mp->num,target)==0)
{printf("%s,%s,%d,%d,%d,%d,%d\n",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);
printf("Reinputs the student information:");
scanf ("%s,%s,%d,%d,%d,%d,%d",mp->num,mp->name,&mp->Chinese,&mp->math,&mp->English,&mp->sum,&mp->aver);
printf("%s,%s,%d,%d,%d,%d,%d\n",mp->num,mp->name,mp->Chinese,mp->math,mp->English,mp->sum,mp->aver);
}
楼主这个修改信息吧!

我该了以后,还是输出的时候会出现问题!

2007-01-07 13:30
神秘失恋
Rank: 1
等 级:新手上路
帖 子:663
专家分:0
注 册:2007-1-6
收藏
得分:0 

上帝之手.........
2007-01-07 14:17
danielliujp
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2006-11-30
收藏
得分:0 
给结构成员赋值时最好还是使用一个临时变量比较好,有时在TC编辑下可能会出现问题

上有政策 下有对策
2007-01-13 23:00
快速回复:[讨论][求助]链表的问题?
数据加载中...
 
   



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

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