| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 383 人关注过本帖
标题:大家帮忙看看这个程序哪里出错了?
只看楼主 加入收藏
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
结帖率:89.66%
收藏
已结贴  问题点数:20 回复次数:2 
大家帮忙看看这个程序哪里出错了?
大家帮忙看看这个程序哪里出错了?编译,链接,运行没有问题,可是输入数据的时候就出现内存不能读的问题!请大家帮忙看看!!
题目是输入5个学生的身高体重和姓名,并存放在结构体数组中,从中查找出身高和体重最高的那个学生,并且输出他们的姓名,身高和体重!
程序代码:
#include <stdio.h>
#include <stdlib.h>


 struct student

 { 
     char name[8];
     float high;
     long int weight;
     struct student *next;

 };


 int n,i;

 struct student *creat()

 { 
      i=1;
     struct student *p,*head,*stu;
     head=NULL;
     stu=p=(struct student *)malloc(sizeof(struct student));
     printf("请输入学生 %d 的姓名身高体重:",i);
     scanf("%s,%f,%ld",&stu[i].name,&stu[i].high,&stu[i].weight);
     fflush(stdin);
     while(stu[i].high!=0)
     {
         n++;
         if(n==1)
         {  
             head=stu;
             head->next=NULL;
         }
         else
             p->next=stu;
             p=stu;
          stu=(struct student *)malloc(sizeof(struct student));
          printf("请输入学生 %d 的姓名身高体重:",++i);
          scanf("%s,%f,%ld",&stu[i].name,&stu[i].high,&stu[i].weight);
          fflush(stdin);
     }
     p->next=NULL;
     return(head);

 }



 int search(struct student *head)

 {  
     struct student *stu;
     float t;
     int j,l;
     stu=head;
     t=stu[0].high;
     for(j=1;j<=i;j++)
     { 
         if(t<stu[j].high)
         {
             t=stu[j].high;
             l=j;
         }
     }
     return l;

 }



 int find(struct student *head)

 { 
     struct student *stu;
     long int t,j,k;
     stu=head;
     t=stu[0].weight;
     for(j=1;i<=i;j++)
     {
         if(t<stu[j].weight)
         {
             t=stu[j].weight;
             k=j;
         }
     }
     return k;

 }



 void  main(void)

 {  
     struct student *head,*stu;
     head=creat();
     stu=head;
     int a,b;    
     a=search(head);
     printf("%-5s%-5f%-5ld",stu[a].name,stu[a].high,stu[a].weight);
     b=find(head);
     printf("%-5s%-5f%-5ld",stu[b].name,stu[b].high,stu[b].weight);
     return;

 }

搜索更多相关主题的帖子: 结构体 姓名 
2010-12-13 23:52
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:20 
不看也知道是指针(地址)的问题。“&stu[i].name”为什么要加个下标啊?(并且你的i第一次为1),stu不是数组。

[ 本帖最后由 cnfarer 于 2010-12-14 07:53 编辑 ]

★★★★★为人民服务★★★★★
2010-12-14 07:52
whbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:180
专家分:139
注 册:2010-3-31
收藏
得分:0 
回复 2楼 cnfarer
嗯,谢谢版主的指点,刚才那个问题好了,但是就是输入数据的时候能无限制输入,版主帮我看看!!(创建链表的时候)。
程序代码:
#include <stdio.h>
#include <stdlib.h>


 struct student

 { 
     char name[8];
     float high;
     long int weight;
     struct student *next;

 };


 int n,i;

 struct student *creat()//创建链表
 { 
      i=1;
     struct student *p,*head,*stud;
     head=NULL;
     stud=p=(struct student *)malloc(sizeof(struct student));
     printf("请输入学生 %d 的身高体重姓名:",i);
     scanf("%s,%f,%ld",&stud->high,&stud->weight,&stud->name);
     fflush(stdin);
     while(stud->high)
     {
         n++;
         if(n==1)
         {  
             head=stud;
             head->next=NULL;
         }
         else
             p->next=stud;
             p=stud;
          stud=(struct student *)malloc(sizeof(struct student));
          printf("请输入学生 %d 的姓名身高体重:",++i);
          scanf("%s,%f,%ld",&stud->name,&stud->high,&stud->weight);
          fflush(stdin);
     }
     p->next=NULL;
     return(head);

 }



 struct student *search(struct student *head)//找出高度最高的那个学生
 {  
     struct student *stud;
     float t;                         
     int j;
     stud=head;
     t=stud->high;
     for(j=1;j<=i;j++)
     { 
         if(t<stud->high)
         {
             t=stud->high;
         }
     }
     return stud;

 }



 struct student  *find(struct student *head)//找出体重最重的那个学生
 { 
     struct student *stud;
     long int t,j;
     stud=head;
     t=stud->weight;
     for(j=1;i<=i;j++)
     {
         if(t<stud->weight)
         {
             t=stud->weight;
         }
     }
     return stud;

 }



 void  main(void)

 {  
     struct student *head,*stud;
     head=creat();
     stud=head;
     struct student *a,*b;    
     a=search(head);
     printf("%-5s%-5f%-5ld",a->name,a->high,a->weight);//输出高度最高那个学生的所有项
     b=find(head);
     printf("%-5s%-5f%-5ld",a->name,a->high,a->weight);//输出体重最重的那个学生的所有项
     return;

 }

付出终将有回报!Ibelieve!
2010-12-14 09:09
快速回复:大家帮忙看看这个程序哪里出错了?
数据加载中...
 
   



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

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