免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6047 | 回复: 8
打印 上一主题 下一主题

[函数] 递归函数结束提条件应该如何确定 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-28 18:01 |只看该作者 |倒序浏览
如下函数应该怎样去确定输入结束条件
void createTree(Tree *tree)
{
        char ch;
        scanf("%c",&ch);
        if(ch==' ')
                tree=NULL;
        else
        {
                if(!(tree=(Tree *)malloc(sizeof(Tree))))
                        exit(OVERFLOW);
                tree->data=ch;
                createTree(tree->leftchild_ptr);
                createTree(tree->rightchild_ptr);
        }
}

论坛徽章:
0
2 [报告]
发表于 2005-11-28 18:19 |只看该作者
你可以是用指定的字符作为结束标志
if (ch == '0')
    return;
else
   ...

ps: scanf("%c",&ch);
这一句应当会产生问题,应当会把'\n'读入,应当改成
scanf("%c%*c", &ch); 忽略掉每一次输入后缓冲区剩下的字符。

论坛徽章:
0
3 [报告]
发表于 2005-11-28 18:58 |只看该作者
原帖由 renstone921 于 2005-11-28 18:19 发表
你可以是用指定的字符作为结束标志
if (ch == '0')
    return;
else
   ...

ps: scanf("%c",&ch);
这一句应当会产生问题,应当会把'\n'读入,应当改成
scanf("%c%*c", &c ...

这样不行 我也是这样做的
调试的时候输入0 程序还是阻塞在等待输入状态

论坛徽章:
0
4 [报告]
发表于 2005-11-28 19:19 |只看该作者
ps: scanf("%c",&ch);
这一句应当会产生问题,应当会把'\n'读入,应当改成
scanf("%c%*c", &ch); 忽略掉每一次输入后缓冲区剩下的字符。


LZ考虑到没有?
或者
if(!isalnum(ch))
类似的,试试?

论坛徽章:
0
5 [报告]
发表于 2005-11-28 19:31 |只看该作者
用特殊字符试试,如 ch =='#'啊这些

论坛徽章:
0
6 [报告]
发表于 2005-11-28 19:32 |只看该作者
if(scanf("%c",&ch)==EOF) tree = NULL;
else ...

输入时用 ^D 中止。

原帖由 zh_manyu 于 2005-11-28 18:01 发表
如下函数应该怎样去确定输入结束条件
void createTree(Tree *tree)
{
        char ch;
        scanf("%c",&ch);
        if(ch==' ')
                tree=NULL;
        else
        {
                if(!(tree=(Tree *)malloc(sizeof(Tree))))
                 ...

论坛徽章:
0
7 [报告]
发表于 2005-11-28 20:25 |只看该作者
原帖由 zalem 于 2005-11-28 19:19 发表


LZ考虑到没有?
或者
if(!isalnum(ch))
类似的,试试?

scanf 改了也试了还是一样
if(!isalnum(ch))是满足的scanf已经格式化了的


特殊字符也不行


if(scanf("%c",&ch)==EOF) tree = NULL;
else ...这个也不行

我测试的时候发现加上if (ch == '0') return;else。。。。。
如果在输入时第一个输入为‘0’时程序正确执行了

[ 本帖最后由 zh_manyu 于 2005-11-28 20:27 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2005-11-28 21:56 |只看该作者
呵呵,不晓的你怎么输的,可能你忽略一个东西,你以为只要输入一个终止字符(设ch == '#'跳出)程序

就会结束了,其实不是这样的,因为树的左右指针如果为空就都要赋NULL的,也就是说scanf需要读入对应

NULL个的终止符。

   比如说你输入gs###就可以跳出了,两个结点,三个空指针,就是这样的。

论坛徽章:
0
9 [报告]
发表于 2005-11-28 23:49 |只看该作者

回复 8楼 skygram 的帖子

楼上的正解

我调了很久才发现的

早点来看就省时间了 呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP