| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 562 人关注过本帖
标题:这字符型数据输入是怎么一回事啊
只看楼主 加入收藏
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
结帖率:58.18%
收藏
已结贴  问题点数:20 回复次数:12 
这字符型数据输入是怎么一回事啊
我输入N后,在输入N组数据应该就有结果的为什么要输入N+1组啊
比如
8
G - 4
B 7 6
F - -
A 5 1
H - -
C 0 -
D - -
E 2 -
输入到这里应该就有结果了,可我还需要再输入一组任意的数据比如 K - -
程序代码:
#include <stdio.h>

#define MaxTree 100
#define NULL -1

typedef int Tree ;
typedef char  ElementType ;
typedef struct TreeNode TreeNodeArray ;

struct TreeNode
{
    ElementType Element ;
    Tree Left ;
    Tree Right ;
} ;
struct TreeNode Tree1[MaxTree] , Tree2[MaxTree] ;


Tree BuildeTree( TreeNodeArray Tree[]  )
{
    int i,N,check[MaxTree] ;
    char cl,cr ;
    int Root ;
    scanf("%d\n",&N ) ;

    if( N!=0 )
    {
        for( i=0 ; i<N ; i++ ) check[i] = 0 ;
        for( i=0 ; i<N ; i++ )
        {
            //check[i]=0 ; //结点是孩子结点就将它标记为1
            scanf("%c %c %c\n" , &Tree[i].Element , &cl , &cr ) ;
            if( Tree[i].Left != '-' )//如果结点有左孩子结点,将左孩子结点标记
            {
                Tree[i].Left = cl-'0' ;
                check[ Tree[i].Left ] = 1 ;
            }
            else Tree[i].Left = NULL ;

            if( Tree[i].Right!= '-' )//如果结点有右孩子结点,将右孩子结点标记
             {
                 Tree[i].Right = cr-'0' ;
                 check[ Tree[i].Right ] =1 ;
             }
            else Tree[i].Right = NULL ;                        
        }
    }

    for(i=0 ; i<N ; i++ )
    {
        if(check[ i ]==0 )
        break ;
    }
    Root = i ;

    return  Root ;
}



int main(  )
{
    Tree Root1 , Root2 ;
    Root1 = BuildeTree( Tree1 ) ;
    //Root2 = BuildeTree( Tree2 ) ;

    printf("%d\n",Root1) ;

    return 0 ;
}

图片附件: 游客没有浏览图片的权限,请 登录注册


搜索更多相关主题的帖子: color 
2015-11-19 16:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
沒學會調試程序?

授人以渔,不授人以鱼。
2015-11-19 17:42
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
上楼说的就跟他会调试似的

把scanf里的格式字符串"%c %c %c\n"改成" %c %c %c"试试。注意,这字符串的第一位是个空格。具体原因就让T版解释吧。

另外,你为什么要重新定义NULL?你的程序编译过程中居然没报错或有告警提示?

重剑无锋,大巧不工
2015-11-19 18:23
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
哦,发贴时我以为我是3楼。小白快我一步。上贴中的“上楼”指的是2楼TonyDeng。

重剑无锋,大巧不工
2015-11-19 18:33
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 4楼 beyondyf
重新定义NULL是因为输入的原因,这里输入的坐标可能是0,所以就将空设为-1了
2015-11-19 21:30
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 2楼 TonyDeng
我下了文档,还没开始看
2015-11-19 21:30
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
回复 4楼 beyondyf
我查了下资料,我那么写出错了,原因很多吧。
scanf("%d\n",&N ) 在网上看到的几个说法:
1.
该格式字符串在之前的字符串基础上,增加了一个\n 换行符。但是输入函数并不认为格式字符串中的\n 是一个换行符,
而是将其视做一个反斜杠\和一个字母n。因此在输入的时候,还应当输入这两个字符。
2.
scanf("%d\n",&a); -> scanf("%d",&a);
(B) 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符,空白符可以是space,tab,newline等等,直到第一个非空白符出现为止。
(C) 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。

对第二种说法不明白,能举个例子么?
2015-11-20 10:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:5 
回复 8楼 令狐少侠56
说法2是正确的,提出说法1的可以写架空类小说了
2015-11-20 10:51
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
scanf(" %c %c %c" , &Tree[i].Element , &cl , &cr ) ;去掉\n,每个%c前面加个空格
这样确实可以,不过能告诉我%c前面加个空格什么意思么?将输入的回车和空格抵消?

图片附件: 游客没有浏览图片的权限,请 登录注册
2015-11-20 10:53
令狐少侠56
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:320
专家分:175
注 册:2014-4-10
收藏
得分:0 
我看了网上scanf的用法后
加上了fflush(stdin) ;
fflush(stdin) ;
scanf("%c %c %c" , &Tree[i].Element , &cl , &cr );
这里我以为%c前面不可以有空格的可结果%c前面不管有没有空格都能成功。。。。
fflush(stdin) ;
scanf(" %c %c %c" , &Tree[i].Element , &cl , &cr );
2015-11-20 10:58
快速回复:这字符型数据输入是怎么一回事啊
数据加载中...
 
   



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

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