| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:新手,请教各位大侠c程序问题出在哪里,都想了一个上午了。谢谢了!!
只看楼主 加入收藏
chenfeng201
Rank: 2
等 级:论坛游民
帖 子:11
专家分:31
注 册:2009-10-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
新手,请教各位大侠c程序问题出在哪里,都想了一个上午了。谢谢了!!
这是数据结构的一道题目,要求我们按指针链表结构输入实现存储(意思大致是这样子的,老师也没讲清楚)
问题出在输出中,我先要求给定n,然后输入,再判断link是否为NIULL来输出所有的数据,照理来说应该没有问题
运行:叫我输入n的值,5,回车
然后开始输入字符串,回车
可是输出的时候只有4个字符,而且多了一个空行(程序里没有这个命令啊)

1:首先我将creat()中i=1,改为i=0,输出长度正常,但还是有空行

2:改回i=1,将输入n的命令删除,在程序里面定义n的值,结果一切正常,空行也没有了。
大概问题出在输入n的值地方,可就是想不出来,特意来求教,不胜感激!!

#include "stdio.h"
typedef struct node { char data;
                      struct node *link;
                    } NODE;
NODE *head,*p,*q;                    
void creat(int n)
{
    int i=0;
    if(n!=0)
       {
           head=(NODE *)malloc(sizeof(NODE));
           p=head;
           for(i=1;i<n;i++)
              {   
                  scanf("%c",&(p->data));
                  q=(NODE *)malloc(sizeof(NODE));
                  p->link=q;
                  p=q;
              }      
          scanf("%c",&(p->data));
          p->link=NULL;            
       }
    else
        printf("n的值必须为正整数,请重新输入!");

}

void outlist()
{
   if(head!=NULL)
   {
      p=head;
      while(p->link!=NULL)
        {
             printf("%c",p->data);
             p=p->link;              
        }                 
      printf("%c",p->data);
   }               
     
}  

main()
{
    int n;
    printf("Please input the number of your chars:");
    scanf("%d",&n);
    creat(n);
    outlist();
    printf("\n请按任意键结束...");  
    getch();        
}   
搜索更多相关主题的帖子: 字符串 c程序 而且 
2009-10-05 12:32
chenfeng201
Rank: 2
等 级:论坛游民
帖 子:11
专家分:31
注 册:2009-10-5
收藏
得分:0 
自己顶一下
2009-10-05 14:41
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:1 
我也给你顶一下
2009-10-05 14:43
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
收藏
得分:19 
这是因为你输入数字5后,最后敲入的回车符仍然留在键盘缓冲区中,所以creat函数执行的时候,其中的scanf函数最先取到的字符是回车符。如果你后来输入的5个字符是abcde,那么得到的输出就会是空行(前面留下的回车符)和abcd,e不会输出。解决方法是在creat函数调用之前加一句fflush(stdin);或getchar();将这个回车符清掉就好了。

你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2009-10-05 14:49
chenfeng201
Rank: 2
等 级:论坛游民
帖 子:11
专家分:31
注 册:2009-10-5
收藏
得分:0 
回复 4楼 chenaiyuxue
好的,我去试试看
(话说原来我也觉得可能是那个回车的问题)
2009-10-05 15:01
chenfeng201
Rank: 2
等 级:论坛游民
帖 子:11
专家分:31
注 册:2009-10-5
收藏
得分:0 
果然是这个问题,谢谢了啊
(书上有一小段代码,其中有getchar()这一行,,在creat()中p->link=NULL之前,但一开始我认为这个没有什么用,没有加上去
出现问题后,我觉得可能是这个原因,加上后问题依然

按照4楼大侠,在调用creat函数之前加了getchar();问题解决

谢谢各位,特别四楼啊
(看来书上有问题么…………)
2009-10-05 15:09
快速回复:新手,请教各位大侠c程序问题出在哪里,都想了一个上午了。谢谢了!!
数据加载中...
 
   



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

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