| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖
标题:主函数里面scanf为什么没有被调用,求指教
只看楼主 加入收藏
heso
Rank: 2
等 级:论坛游民
帖 子:20
专家分:39
注 册:2015-3-15
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
主函数里面scanf为什么没有被调用,求指教
代码如下
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    char data;
    struct node *lchild,*rchild;
}Tnode,*Bistree;
#define LEN sizeof(Tnode)
void Insertbst(Bistree *T,Bistree p)
{
    if(*T==NULL) *T=p;
    else if((*T)->data==p->data)return;
    else if((*T)->data>p->data) Insertbst(&(*T)->lchild,p);
    else Insertbst(&(*T)->rchild,p);
}
void Createbst(Bistree *T)//T为为二级指针
{
    Bistree p;
    char ch;
    ch=getchar();
    *T=NULL;
    while(ch!='@')
    {
        p=(Bistree)malloc(LEN);
        p->data=ch;
        p->lchild=p->rchild=NULL;
        Insertbst(T,p);
        ch=getchar();
    }
}
Inorder(Bistree T)
{
    if(T!=NULL)
    {
        Inorder(T->lchild);
        printf(" %c",T->data);
        Inorder(T->rchild);
    }
}

int main()
{
    Tnode root;
    Bistree T=&root;
    Bistree newp=(Bistree)malloc(LEN);
    Createbst(&T);
    Inorder(T);
    putchar('\n');
    printf("请输入要插入的字符:");
    scanf_s("%c",&(newp->data));
    newp->lchild=newp->rchild=NULL;
    Insertbst(&T,newp);
    Inorder(T);
    putchar('\n');

    system("pause");
    return 0;
}谢谢
搜索更多相关主题的帖子: include return include return 
2015-03-15 20:13
妖孽灬人生
Rank: 2
等 级:论坛游民
帖 子:14
专家分:25
注 册:2013-8-8
收藏
得分:20 
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    char data;
    struct node *lchild, *rchild;
}Tnode, *Bistree;

#define LEN sizeof(Tnode)

void Insertbst(Bistree *T,Bistree p)
{
    if(*T == NULL)
        *T = p;
    else if((*T)->data == p->data)
        return ;
    else if((*T)->data > p->data) 
        Insertbst(&(*T)->lchild, p);
    else 
        Insertbst(&(*T)->rchild, p);
}
void Createbst(Bistree *T)//T为为二级指针
{
    Bistree p;
    char ch;
    ch = getchar();
    *T = NULL;
    while(ch != '@')
    {
        p = (Bistree)malloc(LEN);
        p->data = ch;
        p->lchild = p->rchild=NULL;
        Insertbst(T,p);
        ch = getchar();
    }
}
void Inorder(Bistree T)
{
    if(T != NULL)
    {
        Inorder(T->lchild);
        printf(" %c", T->data);
        Inorder(T->rchild);
    }
}

int main()
{
    Tnode root;
    Bistree T = &root;
    Bistree newp = (Bistree)malloc(LEN);
    Createbst(&T);
    Inorder(T);
    putchar('\n');
    fflush(stdin);
    printf("请输入要插入的字符:");
    scanf("%c",&(newp->data));
    newp->lchild = newp->rchild = NULL;
    Insertbst(&T,newp);
    Inorder(T);
    putchar('\n');

    system("pause");
    return 0;
}


scanf后面不要加_s  另外插入前先清一下缓存   楼主可以试试
2015-03-15 22:15
妖孽灬人生
Rank: 2
等 级:论坛游民
帖 子:14
专家分:25
注 册:2013-8-8
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<stdlib.h>

typedef struct node
{
    char data;
    struct node *lchild, *rchild;
}Tnode, *Bistree;

#define LEN sizeof(Tnode)

void Insertbst(Bistree *T,Bistree p)
{
    if(*T == NULL)
        *T = p;
    else if((*T)->data == p->data)
        return ;
    else if((*T)->data > p->data) 
        Insertbst(&(*T)->lchild, p);
    else 
        Insertbst(&(*T)->rchild, p);
}
void Createbst(Bistree *T)//T为为二级指针
{
    Bistree p;
    char ch;
    ch = getchar();
    *T = NULL;
    while(ch != '@')
    {
        p = (Bistree)malloc(LEN);
        p->data = ch;
        p->lchild = p->rchild=NULL;
        Insertbst(T,p);
        ch = getchar();
    }
}
void Inorder(Bistree T)
{
    if(T != NULL)
    {
        Inorder(T->lchild);
        printf(" %c", T->data);
        Inorder(T->rchild);
    }
}

int main()
{
    Tnode root;
    Bistree T = &root;
    Bistree newp = (Bistree)malloc(LEN);
    Createbst(&T);
    Inorder(T);
    putchar('\n');
    fflush(stdin);
    printf("请输入要插入的字符:");
    scanf("%c",&(newp->data));
    newp->lchild = newp->rchild = NULL;
    Insertbst(&T,newp);
    Inorder(T);
    putchar('\n');

    system("pause");
    return 0;
}


scanf后面不要加_s  另外插入前先清一下缓存   楼主可以试试
2015-03-15 22:15
妖孽灬人生
Rank: 2
等 级:论坛游民
帖 子:14
专家分:25
注 册:2013-8-8
收藏
得分:0 
晕 怎么发了2次  是一样的   楼主看一个就可以了
2015-03-15 22:41
heso
Rank: 2
等 级:论坛游民
帖 子:20
专家分:39
注 册:2015-3-15
收藏
得分:0 
回复 2楼 妖孽灬人生
谢谢你 没有学过    fflush(stdin); 函数 能告诉一下出这样问题的原因吗 再次感谢
2015-03-17 10:26
妖孽灬人生
Rank: 2
等 级:论坛游民
帖 子:14
专家分:25
注 册:2013-8-8
收藏
得分:0 
回复 5楼 heso
stdin是标准输入
可以看作一个文件缓冲区
使用fflush可以把里面的内容写入到屏幕上
这可以防止scan等读入控制台的函数取到无用的数据
就类似写文件一样,当我们使用带缓冲的操作接口时,如果想强行写到文件中,就需要自己调用fflush函数
2015-03-20 23:06
快速回复:主函数里面scanf为什么没有被调用,求指教
数据加载中...
 
   



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

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