LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2764|回复: 10

建立二叉树的算法

[复制链接]
发表于 2005-8-3 10:50:52 | 显示全部楼层 |阅读模式
为什么程序无法结束?
比如:
我输入a,回车,
这时候应该调用1语句,
然后输入空格,
这时候应该返回,然后调用2语句,
我再输入空格,
程序就应该结束了。
可是不管输入多少空格,程序就是不结束?
请问这是为什么?
谢谢。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef char DataType;
  4. typedef struct node {
  5.         DataType data;
  6.         struct node *lchild, *rchild;
  7. } BinTNode;
  8. typedef BinTNode *BinTree;
  9. void CreateBinTree (BinTree *T) {
  10.         char ch;
  11.         int i=1;
  12.         ch=getchar();
  13.         if (ch==' ') {
  14.                 *T=NULL;
  15.                 printf ("abc");
  16.         }
  17.         else {
  18.                 *T=(BinTNode *)malloc(sizeof(BinTNode));
  19.                 (*T)->data=ch;
  20.                 CreateBinTree (&((*T)->lchild));  //1
  21.                 CreateBinTree (&((*T)->rchild));  //2
  22.                 printf ("aaa");
  23.         }
  24. }
  25. void main () {
  26.         BinTree root;
  27.         CreateBinTree (&root);
  28. }
复制代码
发表于 2005-8-3 12:17:27 | 显示全部楼层
好像是getchar()那里的问题,自己的几行代码调试一下不就知道了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-3 16:41:22 | 显示全部楼层
调试过了没有错误,
可以生成可执行文件。
就是运行可执行文件时,无法中止程序。
回复 支持 反对

使用道具 举报

发表于 2005-8-3 18:13:35 | 显示全部楼层
调试!=编译通过!=可生成执行文件
我加了几行调试代码用mingw试了一下,好像就是getchar那里在作梗,以前碰到别人的程序在getchar时出问题,好像要用什么flush刷一下缓冲区,具体细节不明,请明白的兄弟说说。
回复 支持 反对

使用道具 举报

发表于 2005-8-3 22:53:15 | 显示全部楼层
第二次读到的大概是回车,唉
回复 支持 反对

使用道具 举报

发表于 2005-8-3 22:54:51 | 显示全部楼层
这个程序似乎很多错误阿
回复 支持 反对

使用道具 举报

发表于 2005-8-4 12:42:49 | 显示全部楼层
在ch=getchar()之后加一条getchar()语句,否则第二次ch=getchar()得到的是第一次输入a后的换行符
回复 支持 反对

使用道具 举报

发表于 2005-8-4 18:00:01 | 显示全部楼层
Post by jiangn
调试!=编译通过!=可生成执行文件
我加了几行调试代码用mingw试了一下,好像就是getchar那里在作梗,以前碰到别人的程序在getchar时出问题,好像要用什么flush刷一下缓冲区,具体细节不明,请明白的兄弟说说。


int fflush(FILE *fp)
回复 支持 反对

使用道具 举报

发表于 2005-8-5 04:42:04 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef char DataType;
  4. typedef struct node {
  5.         DataType data;
  6.         struct node *lchild, *rchild;
  7. } BinTNode;
  8. typedef BinTNode *BinTree;
  9. void CreateBinTree (BinTree *T) {
  10.         char ch;
  11.         int i=1;
  12.         ch=getchar();
  13.         if (ch==' ') {
  14.                 T=NULL;
  15.                 printf ("abc");
  16.         }
  17.         else {
  18.                 T=(BinTNode *)malloc(sizeof(BinTNode));
  19.                 T->data=ch;
  20.                 CreateBinTree (T->lchild));  //1
  21.                 CreateBinTree (T->rchild));  //2
  22.                 printf ("aaa");
  23.         }
  24. }
  25. void main () {
  26.         BinTree root;
  27.         CreateBinTree (&root);
  28. }
复制代码

这样就应该行了
回复 支持 反对

使用道具 举报

发表于 2005-8-20 16:56:47 | 显示全部楼层
Post by ak70
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef char DataType;
  4. typedef struct node {
  5.         DataType data;
  6.         struct node *lchild, *rchild;
  7. } BinTNode;
  8. typedef BinTNode *BinTree;
  9. void CreateBinTree (BinTree *T) {
  10.         char ch;
  11.         int i=1;
  12.         ch=getchar();
  13.         if (ch==' ') {
  14.                 T=NULL;
  15.                 printf ("abc");
  16.         }
  17.         else {
  18.                 T=(BinTNode *)malloc(sizeof(BinTNode));
  19.                 T->data=ch;
  20.                 CreateBinTree (T->lchild));  //1
  21.                 CreateBinTree (T->rchild));  //2
  22.                 printf ("aaa");
  23.         }
  24. }
  25. void main () {
  26.         BinTree root;
  27.         CreateBinTree (&root);
  28. }
复制代码

这样就应该行了

是因为你下一个字符接受的是回车,按下面的改可以,另外把你的结束标志换成除空格外的另一个字符

#include <stdio.h>

#include <stdlib.h>
typedef char DataType;
typedef struct node
{
        DataType data;
        struct node *lchild, *rchild;
} BinTNode;
typedef BinTNode *BinTree;
void CreateBinTree (BinTree *T)
{
        char ch;
        printf("%s\n","lease enter");
        scanf("\n%c",&ch);
        if (ch=='#')
        {
                *T=NULL;
        //        printf ("abc");
        }
        else
        {
                *T=(BinTNode *)malloc(sizeof(BinTNode));
                (*T)->data=ch;
                CreateBinTree (&((*T)->lchild));  //1
                CreateBinTree (&((*T)->rchild));  //2
               // printf ("aaa");
        }
}
void main ()
{
        BinTree root;
        CreateBinTree (&root);
}
已经编译运行过了,可以。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表