荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bakey (一日不见,如隔生抽), 信区: Program
标  题: [合集]请教一个简单的问题!
发信站: 荔园晨风BBS站 (2005年07月12日18:47:09 星期二), 站内信件

☆   1  ──────────── 我是分割线 ─────────────────☆
发信人: tth (没有风的天空), 信区: Program
标  题: 请教一个简单的问题!
时  间: 2005年07月06日23:22:45 星期三

这是一个建立链表的简单问题,我是初学者,不知道那里出错了,看不到结果.请帮忙看下
好吗?谢谢!

#include"stdio.h"

#include"conio.h"

#include"malloc.h"

#define NULL 0

#define LEN sizeof(struct student)

struct student

{long num;

 float score;

 struct student *next;

  };

   int n;

  struct student *creat(void)

  {

  struct student *head;

  struct student *p1,*p2;

  n=0;

   p1=p2=(struct student*)malloc(LEN);

   scanf("%ld%f",&p1->num,&p1->score);

   head=NULL;

   while(p1->num!=0);

   {n=n+1;

    if(n==1)head=p1;

     else p2->next=p1;

     p2=p1;

     p1=(struct student*)malloc(LEN);

     scanf("%ld,%f",&p1->num,&p1->score);

    }

    p2->next=NULL;

    return(head);

    }

void main()

    {struct student *creat(void);

     struct student *p;

    p=creat();

    do

      {printf("%ld%f\n",p->num,p->score);

      p=p->next;

      }while(p!=NULL);

      getch();

      }


☆   2  ──────────── 我是分割线 ─────────────────☆
发信人: achang (马甲被封), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日11:42:11 星期四

这程序咋一看没啥问题啊。。
可是运行就不掂了。。不知道什么原因。。。




☆   3  ──────────── 我是分割线 ─────────────────☆
发信人: tth (没有风的天空), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日12:38:16 星期四

是啊,看不出那里有问题运行也没有错,但却得不到结果,郁闷!



☆   4  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (一日不见,如隔生抽), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日13:05:59 星期四

你看不到结果是以为
create函数那里的while后面加了分号,去掉就可以了
不过你的程序还是有问题的



☆   5  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (一日不见,如隔生抽), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日13:34:23 星期四

我把你的程序改了一下
你应该是想建一个单链表之类吧,我按这个去修改了,你看看
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)

struct student
{
    long num;
    float score;
    struct student *next;
};

int n;

struct student *creat(void)
{
    struct student *head;
    struct student *p1,*p2;

    n=0;
    p1=(struct student*)malloc(LEN);
    scanf("%ld%f",&p1->num,&p1->score);
    head=p2=p1;
    head->next = NULL;
    while(p1->num!=0)
    {
        n ++;
        if (n > 1)
        {
            p2->next = p1;
            p2 = p1;
            p2->next = NULL;
        }
        p1=(struct student*)malloc(LEN);
        p1->next = NULL;
        scanf("%ld%f",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return(head);
}

void main()

{
    struct student *creat(void);
    struct student *p;
    p=creat();
    do
    {
        if (p == NULL)
            break;
        printf("%ld %.4f\n",p->num,p->score);
        p=p->next;
    }while (p != NULL);

}



☆   6  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (一日不见,如隔生抽), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日13:37:32 星期四

关于你的问题:都是一些细节
1,while这种循环语句记得后面不要加分号。这个在自己debug的时候应该很快查出来
2,你的输入写成了这样:scanf("%d, %f",&p->num,&p->score);
双引号里面是不需要加逗号的。以后注意了。
ps:我调试的时候很长时间都没看到这个错误.....
写链表最重要的是要把握好指针的运用,你应该很清晰地知道每个指针是指向哪里的
要不很容易造成内存出错



☆   7  ──────────── 我是分割线 ─────────────────☆
寄信人: achang (马甲被封)
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日17:56:30 星期四
来  源: 192.168.110.128

我跟你相反,我第一眼就看到那个逗号了。。
但是while后面的那个分号却一直都没看出来。。
而且也很想知道这个分号产生了怎样的效果,
PS:什么时候下来教我一些调试技巧。。




☆   8  ──────────── 我是分割线 ─────────────────☆
发信人: kevinh (如果爱·搁浅), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日20:23:35 星期四


do
  {

  }while();

后面要加分号的.




☆   9  ──────────── 我是分割线 ─────────────────☆
发信人: bakey (一日不见,如隔生抽), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日20:39:10 星期四

不是这个while..



☆  10  ──────────── 我是分割线 ─────────────────☆
发信人: kevinh (如果爱·搁浅), 信区: Program
标  题: Re: 请教一个简单的问题!
时  间: 2005年07月07日22:12:47 星期四


oooo,看到了。。。。。


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店