| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 291 人关注过本帖
标题:请高手帮忙看看 链表小问题!!!!
只看楼主 加入收藏
wxwaitr
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-1-13
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
请高手帮忙看看 链表小问题!!!!
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
struct student
    {
       char name[];
       int banji;
       int fenshu;
       int paiming;
       struct student *next;   
           
    };/*创建一个学生结构体 */

struct student *head;/*创建一个学student类型的头指针 */

student *creat()/*该函数实现链表的创建和赋值 */
   {
     student *tail;
     student *stop;/*创建两个student类型的指针 */
     stop=new student;/*创建一个学student类型的头指针 */
     printf("please enter the name/banji/fenshu of student\n ");
     scanf("name is %c",&stop->name);
     scanf("banji is %d",&stop->banji);
     scanf("fenshu is %d",&stop->fenshu);   
     tail=stop;
     while((strcmp(stop->name,"null")!=0))/*连续开辟空间并赋值,while的条件为stop->name不为空 */
        {
           if(head=NULL)
              {head=stop;}
            else
                {
                  tail=stop;
                }                           
          stop=new student;
          printf("please enter the name/banji/fenshu of student\n ");
          scanf("name is %c",&stop->name);
          scanf("banji is %d",&stop->banji);
          scanf("fenshu is %d",&stop->fenshu);  
          tail->next=stop;
         
   
        }        
    tail->next=NULL;
    delete stop;  /*删除最后的空tail */
    return head;/*返回头指针 */
        
  }

void show(student *p)/*该函数实现打印创建好的数据 */
 
   {
     student *q=p;
     printf("name 1 banji 1 fenshu");
     while(q->next!=NULL)
       {
         printf("%c 1 %c 1 %d",q->name,q->banji,q->fenshu);
         q=q->next;                  
                          
       }                                 
                  
  }  
  
  
 int main(void)
 
 {
     
    void show(student *creat());
     
     system("pause");
     
     
     }
  
  
  该程序编译通过,但是没结果、
搜索更多相关主题的帖子: 结构体 
2011-01-24 17:31
ppfly
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:297
专家分:1956
注 册:2009-5-17
收藏
得分:10 
你main函数里第一条语句是相当于申明,而不是被执行的。
将第一条语句改为show(creat());再试。注意加上return 0;
程序代码:
int main(void)
{ 
    show(creat());
    system("pause");
    return 0;  
}



********多贴代码,少说空话*******
2011-01-25 20:06
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
收藏
得分:10 
楼主,你这个程序里包含的错误太多了,怎么可能“通过”编译了呢?
稍微给你指点3个错误:
楼主,如果你要调用printf()函数输出"hello",你怎么写呢?难道写成
int main()
{
    ...
    int printf("hello"); //相信你不会这样写,但你调用自己定义的函数却那样写
void show(student *creat());//这是你的写法
}
记住:库函数和用户自定义函数的不同仅仅在于:库函数是先人写的,而用户自定义函数是我们自己写的,而我们和先人一样,都是人啊!先人的函数怎么调用,我们自己的函数当然也该怎么调用了啊。
此乃错误一。

楼主,你知道
struct student
    {
       char name[]; //这句话的含义么?
       int banji;
我知道!你是想定义一个字符串,但又想不要先固定它的长度,这样可以根据使用这个程序的人的具体的输入来确定。
可惜,这是美丽而又不切实际的想法。
楼主,首先要严厉地指出,这是你学习C语言的一个重要方法误区(其实也是整个中国的大学,教C语言的共同误区):人本位主义!
好了,先不说这个复杂概念的成因和后果,直接给你一个具体的结果:
C语言程序写完后,是由C语言编译软件解释成机器指令的,那么C语言编译软件如何对你的程序进行加工,你是没有任何发言权的,也就是说,我下面的说法是C编译软件的行为,不以人的意志为转移,要恨只能恨你自己晚生了80年(否则可以由你来定义基本的C语言原则了)!
好了,本来不想说的,但一不小心还是说出来了。言归正传:
struct是C语言能建立“新的数据类型”的手段(共有2个手段),也就是说,你一开始是在定义一个C语言原本根本不存在的数据类型:struct student(这是这个数据类型的全称,如果没有经过typedef的定义,是不能只用student作为这个类型的;这其实是你的第4个错误,这个错误是真的要批评的)。然而,国内以及绝大多数国外的C语言教学者,对于数据类型的问题的讲解,统统简化或者说,没有说完整,买椟还珠了!
朱某人(本人)对数据类型的说法是这样的:数据类型有两个要素:
1)识别方式(比如补码、浮点等)
2)长度(字节数)
这两个都必须说得很清楚,否则机器(C编译软件)是无法在程序运行之前申请你所需要的空间(俗称:变量)的,也无法在处理你的程序时,选择合适的数值解释方式,而char name[]正是没有说清楚字符数组的长度,使得数据类型的要素不完整,没有确定的长度啊!
也就是说,你一开始定义的结构体都是有问题的。这是错误3。

当然还有其它错误,但时间问题,我先指出这些。

[ 本帖最后由 犬虫门心 于 2011-1-25 20:59 编辑 ]

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-01-25 20:55
快速回复:请高手帮忙看看 链表小问题!!!!
数据加载中...
 
   



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

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