C语言 vs2010建立二叉树后,按回车没有返回菜单,而是换行了,但是代码没有问题

C语言 vs建立二叉树后,按回车没有返回菜单,而是换行了,但是代码没有问题。在其他电脑的vs上可以运行,请问是vs出问题了吗?如果出了怎么调?

#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#include<malloc.h>
#define MAX 100
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0 
#define OVERFLOW -1
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef int  Status;
typedef struct BiTNode { 
    char    data;
    struct  BiTNode  *lchild, *rchild; 

} BiTNode, *BiTree;
typedef BiTree SElemType;
typedef struct 
{
    SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL
    SElemType *top; // 栈顶指针
    int stacksize; // 当前已分配的存储空间,以元素为单位
}SqStack; // 顺序栈
typedef struct 
{
    BiTree link;
    int flag;
}StackType;
Status InitStack(SqStack &S)
{ // 构造一个空栈S
    S.base=(SElemType *)malloc(sizeof(SElemType));
    if(!S.base)
        return ERROR;
    S.top=S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}//栈的初使化
int StackEmpty(SqStack S)
{ 
    if(S.top==S.base)return TRUE;
    else return FALSE;
}//判断栈空操作
Status Push(SqStack &S,SElemType e)
{ // 插入元素e为新的栈顶元素
    if(S.top-S.base>=S.stacksize){
        S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!S.base)return ERROR;
        S.top=S.base+S.stacksize;
        S.stacksize+=STACKINCREMENT;
    }
    *S.top++=e;
    return OK;
}//入栈操作
Status Pop(SqStack &S,SElemType &e)
{ // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
    if(StackEmpty(S)==1)
        return ERROR;
    e=*--S.top;
    return OK;
}//出栈操作
BiTNode* CreateBiTree()
//以先序遍历方式创建一颗二叉树 
{  
    BiTree T=NULL;
    char c1;
    scanf("%c",&c1);
    if(c1=='#')T=NULL;
    else{
        if(!(T=(BiTree)malloc(sizeof(BiTNode))))exit(OVERFLOW);
        T->data=c1;
        T->lchild=CreateBiTree();
        T->rchild=CreateBiTree();
    }
    return T;
}
//带参数的创建过程,与上面的方法二者可选其一
Status CreateBiTreee(BiTree &T)
{
    T=NULL;
    char c1;
    scanf("%c",&c1);
    if(c1=='#')T=NULL;
    else{
        if(!(T=(BiTree)malloc(sizeof(BiTNode))))exit(OVERFLOW);
        T->data=c1;
        T->lchild=CreateBiTree();
        T->rchild=CreateBiTree();
    }
    return OK;
}//二叉树的创建
void visit(BiTree T)
{
    printf("%3c",T->data);
}//定义访问函数
void Preorder (BiTree T)
{
    if (T) {
        visit(T);
        Preorder(T->lchild); 
        Preorder(T->rchild);
    }  
}//二叉树的先序遍历递归算法
void InOrder(BiTree T)
{

    if(T){  
        InOrder(T->lchild);   
        visit(T);     
        InOrder(T->rchild);      
    }
}//二叉树的中序遍历递归算法
void PostOrder(BiTree T)

{
    if (T==NULL) return;     
    PostOrder(T->lchild);  
    PostOrder(T->rchild);  
    visit(T);      
}   //二叉树的后序遍历递归算法
Status Preorder_2(BiTree T)
{
    SqStack S;
    InitStack(S);
    BiTree p=T;
    if(T==NULL){return ERROR;printf("二叉树为空\n");}
    while(p!=NULL||StackEmpty(S)!=1){
        if(p!=NULL){
            visit(p);
            Push(S,p);
            p=p->lchild;
        }
        else{
            Pop(S,p);
            p=p->rchild;
        }
    }
    return OK;
}//二叉树的先序遍历非递归算法
Status InOrder_2(BiTree T)
{
    SqStack S;
    InitStack(S);
    BiTree p=T;
    if(T==NULL){return ERROR;printf("二叉树为空\n");}
    while(p||StackEmpty(S)!=1){
        if(p){
            Push(S,p);
            p=p->lchild;
        }
        else{
            Pop(S,p);
            visit(p);
            p=p->rchild;
        }
    }
    return OK;
}//二叉树的中序遍历非递归算法
Status PostOrder_2(BiTree T)
{
    StackType S[MAX];
    BiTree p=T;
    int top=-1;
    if(T==NULL)
    {return ERROR;printf("二叉树为空\n");}
    while(p||top!=-1){
        if(p){
            S[++top].link=p;
            S[top].flag=1;
            p=p->lchild;
        }
        else{
            if(S[top].flag==1){
                p=S[top].link->rchild;
                S[top].flag=2;
            }
            else    
                visit(S[top--].link);
            }
        if(top==-1)break;
    }
    return OK;
}//二叉树的后序遍历非递归算法
void menu1()
{
    printf("|============================|\n");
    printf("|****---- 选择式菜单 ----****|\n");
    printf("|============================|\n");
    printf("|                            |\n");
    printf("|     1:二叉树的创建         |\n");
    printf("|                            |\n");
    printf("|     2:二叉树的递归遍历     |\n");
    printf("|                            |\n");
    printf("|     3:二叉树的非递归遍历   |\n");
    printf("|                            |\n");
    printf("|     0:退出菜单             |\n");
    printf("|                            |\n");
    printf("|============================|\n");
}//menu1
void menu2()
{
    printf("|============================|\n");
    printf("| ****--- 选择式菜单 ---**** |\n");
    printf("|============================|\n");
    printf("|                            |\n");
    printf("|     1:先序遍历(递归)       |\n");
    printf("|                            |\n");
    printf("|     2:中序遍历(递归)       |\n");
    printf("|                            |\n");
    printf("|     3:后序遍历(递归)       |\n");
    printf("|                            |\n");
    printf("|     0:返回主菜单           |\n");
    printf("|                            |\n");
    printf("|============================|\n");
}//menu2
void menu3()
{
    printf("|============================|\n");
    printf("|****---- 选择式菜单 ----****|\n");
    printf("|============================|\n");
    printf("|                            |\n");
    printf("|     1:先序遍历(非递归)     |\n");
    printf("|                            |\n");
    printf("|     2:中序遍历(非递归)     |\n");
    printf("|                            |\n");
    printf("|     3:后序遍历(非递归)     |\n");
    printf("|                            |\n");
    printf("|     0:返回主菜单           |\n");
    printf("|                            |\n");
    printf("|============================|\n");
}//menu3

int main()
{
    BiTNode *T;
    int i,j,k;
    int exitflag=0,exitflag1,exitflag2;
    while(!exitflag)
    { 
        menu1();
        scanf("%d",&i);
        switch(i){
        case 0: exitflag=1; break;
        case 1: 
            system("cls");
              fflush(stdin);
    /*fflush(stdin)是用来清空输入缓冲区,通常是为了确保不影响后面的数据读取,
   例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin)。*/
              printf("以先序序列创建二叉树(空用#):");
              T=CreateBiTree();
            system("cls");
            break;
        case 2: system("cls");
            exitflag1=0;
            while(!exitflag1)
            {
                menu2();
                scanf("%d",&j);
                switch(j)
                {
                case 0: exitflag1=1;system("cls");break;
                case 1:
                    system("cls");
                    printf("以递归方式进行的树的先序遍历序列为:\n");
                    Preorder(T);
                    printf("\n");
                    break;
                case 2:
                    system("cls");
                    printf("以递归方式进行的树的中序遍历序列为:\n");
                    InOrder(T);
                    printf("\n");
                    break;
                case 3:
                    system("cls");
                    printf("以递归方式进行的树的后序遍历序列为:\n");
                    PostOrder(T);
                    printf("\n");
                    break;
                default:system("cls");
                    printf("警告!你给的选项号非法,请重新输入!\n");
                    break;
                }

            }
            break;
        case 3:system("cls");
            exitflag2=0;
            while(!exitflag2)
            {
                menu3();
                scanf("%d",&k);
                switch(k)
                {
                case 0: exitflag2=1;system("cls");break;
                case 1:
                    system("cls");
                    printf("以非递归方式进行的树的先序遍历序列为:\n");
                    Preorder_2(T);
                    printf("\n");
                    break;
                case 2:
                    system("cls");
                    printf("以非递归方式进行的树的中序遍历序列为:\n");
                    InOrder_2(T);
                    printf("\n");
                    break;
                case 3:
                    system("cls");
                    printf("以非递归方式进行的树的后序遍历序列为:\n");
                    PostOrder_2(T);
                    printf("\n");
                    break;
                default:system("cls");
                    printf("警告!你给的选项号非法,请重新输入!\n");
                    break;
                }

            }
         default:system("cls");
            printf("警告!你给的选项号非法,请重新输入!\n");
            break;
        }
    }
    return 0;
}

具体要看你的代码。
你怎么判断的返回菜单。
加上一个 getchar(); 把多余的回车吸收下看看。