| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:高手帮忙看看 为什么我运行后自动有值输出了 我都还没输入呢 求求....... ...
只看楼主 加入收藏
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
结帖率:92.86%
收藏
已结贴  问题点数:10 回复次数:12 
高手帮忙看看 为什么我运行后自动有值输出了 我都还没输入呢 求求.........
#include <stdio.h>

typedef struct gradeinfo
{
    int score;
    struct gradeinfo *next;
}node;

node *linklist()
{
    node *head, *tail, *pnew;
    int score;

    head=(node *)malloc(sizeof(node));
    if(head==NULL)
    {
        printf("no enough memory!\n");
        return (NULL);
    }

    head->next=NULL;
    tail=head;

    printf("input the student the score:\n");
    while(1)
    {
        scanf("%d", &score);
        if(score<0)
            break;
        pnew=(node *)malloc(sizeof(node));
        if(pnew==NULL)
        {
            printf("no enouge memory!\n");
            return (NULL);
        }
        pnew->score=score;
        pnew->next=NULL;

        tail->next=pnew;
        tail=pnew;
    }
    return (head);
}

void main()
{
    printf("the result is %d", linklist);
    getch();
}

为什么我运行后自动有值输出了 我都还没输入呢  
2015-09-12 21:42
我爱吃青菜
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:190
专家分:500
注 册:2015-3-29
收藏
得分:2 
printf("the result is %d", linklist);
调用函数怎么不加括号?还有,这函数返回值用%d?
2015-09-13 00:10
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:8 
回复 楼主 露营地
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef struct gradeinfo
{
    int score;
    struct gradeinfo *next;
}node;

node *linklist()
{
    node *head, *tail, *pnew;
    int score;

    head=(node *)malloc(sizeof(node));
    if(head==NULL)
    {
        printf("no enough memory!\n");
        return (NULL);
    }

    head->next=NULL;
    tail=head;

    printf("input the student the score:\n");
    while(1)
    {
        scanf("%d", &score);
        if(score<0)
            break;
        pnew=(node *)malloc(sizeof(node));
        if(pnew==NULL)
        {
            printf("no enouge memory!\n");
            return (NULL);
        }
        pnew->score=score;
        pnew->next=NULL;

        tail->next=pnew;
        tail=pnew;
    }
    return (head);
}
void show(node *head)
{
    node *h=head->next;
    while(h!=NULL)
    {
        printf("%d\t",h->score);
        h=h->next;
    }
}
main()
{
    node *head=linklist();
    printf("the result is\n");
    show(head);
//    printf("the result is %d", linklist);
    getch();
}

剑栈风樯各苦辛,别时冰雪到时春
2015-09-13 07:14
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 3楼 林月儿
嗯嗯  看懂了   谢谢

不要不要的。。。
2015-09-13 15:04
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 3楼 林月儿
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
这三个  其实我写了一个也可以了  最上面一个
但是你写了三个
这样是不是保险一点呢???

不要不要的。。。
2015-09-13 15:13
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用露营地在2015-9-13 15:13:33的发言:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
这三个  其实我写了一个也可以了  最上面一个
但是你写了三个
这样是不是保险一点呢???



我的建议是越少越好!
我的编译器情况为:
getch();需要头文件conio.h
而链表操作相关的开辟空间行为则需要malloc.h头文件
那么为什么不用malloc遇到system("pause");system("cls");这种命令离不开stdlib.h
所以,我用了stdlib.h应对需要情况减少头文件个数
所以头文件不是摆设,不要多写!

剑栈风樯各苦辛,别时冰雪到时春
2015-09-13 15:26
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 3楼 林月儿
我还想问一下

就是这个tail->next=pnew;
        tail=pnew;

为什么还要tail=pnew;
tail->next  不是指向pnew了么??


不要不要的。。。
2015-09-13 15:36
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用露营地在2015-9-13 15:36:09的发言:

我还想问一下

就是这个tail->next=pnew;
        tail=pnew;

为什么还要tail=pnew;
tail->next  不是指向pnew了么??

结贴早了吧?

从这两行代码看出是采用了尾插法建立链表
tail开始时头结点head
tail->next=pnew;第一次执行是将新结点连到tail结点后面,或者说啊,让tail指向pnew
那么tail此时不再是像他名字定义的那样叫尾结点,怎么办呢?
这里第二句的功能就是让tail"后移"tail所在的位置就是当前状态下链表的尾部了
。。。
到了某个点这样的过程还是tail指向新结点,tail再重新赋值为新结点变成尾结点
understand?

剑栈风樯各苦辛,别时冰雪到时春
2015-09-13 15:47
露营地
Rank: 2
来 自:湛江
等 级:论坛游民
帖 子:150
专家分:23
注 册:2015-6-27
收藏
得分:0 
回复 8楼 林月儿
可能是结早了  哈哈  
可是最后一个节点的指针域不是为NULL么
如果tail后移一个的话那不就是在pnew的指针域里了么
是这样么
而且书上说tail 尾指针是指向最后一个节点 , 而最后一个节点的指针域为NULL的
那么就是说tail就是在倒数第二的位置咯?

不要不要的。。。
2015-09-13 16:28
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
以下是引用露营地在2015-9-13 16:28:40的发言:

可能是结早了  哈哈  
可是最后一个节点的指针域不是为NULL么
如果tail后移一个的话那不就是在pnew的指针域里了么
是这样么
而且书上说tail 尾指针是指向最后一个节点 , 而最后一个节点的指针域为NULL的
那么就是说tail就是在倒数第二的位置咯?


tail=pnew;这句让tail变成倒数第一了
pnew->score=score;
pnew->next=NULL;//这句表明tail的指针域也就是pnew 的指针域为NULL

剑栈风樯各苦辛,别时冰雪到时春
2015-09-13 16:44
快速回复:高手帮忙看看 为什么我运行后自动有值输出了 我都还没输入呢 求求.. ...
数据加载中...
 
   



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

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