C语言中关于scanf函数的一些问题详解

 更新时间:2022年01月07日 15:11:06   作者:风雪宜哉  
这篇文章主要为大家介绍了C语言中关于scanf函数的一些问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

在学习创建二叉树时遇到了scanf的一些问题,在此记录下来

创建根节点A后理想情况是输入A的左子树,若不为空继续创建左子树,但输入A后发现重复创建了一个左子树,测试后发现输入A换行后scanf函数接收了换行符(ASCII码10)

若想按次序创建各个节点则需要使用getchar()吸收换行符

 不接收换行符也可以输入一个完整的二叉树序列,也可以成功创建。

void CreateBiTree(BiTree &T)
{
    char ch, temp;
    scanf("%c", &ch);
    temp = getchar(); //换行输入则需要吸收换行
    if (ch == '#')
    {
        T = NULL;
        return;
    }
    else
    {
        T = (Tree *)malloc(sizeof(Tree));
        T->data = ch;
        printf("请输入%c的左子树:", ch);
        CreateBiTree(T->lchild);
        printf("请输入%c的右子树:", ch);
        CreateBiTree(T->rchild);
    }
}

 测试后发现若有多个scanf()例如

输入AB换行,多余的scanf会接收换行符。

若是Int类型换行不被接收,因为换行符可以作为字符被接收,

在多个scanf的情况下可以一行输入多个数据,会依次接收这些数据,

 第一行输入1,2,两个scanf接收了1,2;

 总结

Scanf传递字符会接收换行符,避免则须在换行时吸收多余传递的换行符,(getchar传递字符同理),若有多个scanf(如循环,嵌套)允许一次输入多个数据,scanf依次接收它们。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • 一文搞懂C++ 动态内存

    一文搞懂C++ 动态内存

    这篇文章主要介绍了C++ 动态内存的的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 详解C语言面向对象编程中的封装

    详解C语言面向对象编程中的封装

    这篇文章主要为大家详细介绍了C语言面向对象编程中的封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++关于size_t的bug解决案例

    C++关于size_t的bug解决案例

    这篇文章主要为大家介绍了C++关于size_t的bug解决案例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • C++中静态成员函数与静态成员变量(static )

    C++中静态成员函数与静态成员变量(static )

    这篇文章主要介绍了C++中静态成员函数与静态成员变量(static )的相关资料,需要的朋友可以参考下
    2017-06-06
  • C++空类详解

    C++空类详解

    以下是对C++中的空类进行了详细的介绍,需要的朋友可以过来参考下
    2013-09-09
  • C++实现职工工资管理系统

    C++实现职工工资管理系统

    这篇文章主要为大家详细介绍了C++实现简单的职工工资管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Cmake中强大的输出函数message示例解析

    Cmake中强大的输出函数message示例解析

    这篇文章主要介绍了Cmake中强大的输出函数message解析,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • C语言中的状态机设计深入讲解

    C语言中的状态机设计深入讲解

    这篇文章主要给大家介绍了关于C语言状态机设计的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • QT5交叉编译入门级教程(arm64、mips64)

    QT5交叉编译入门级教程(arm64、mips64)

    交叉编译就是在当前系统平台上,开发编译运行于其它平台的程序,比如本文硬件环境是x86平台,但是编译出来的程序是在arm64架构、mips64等架构上运行,本文给大家分享QT5交叉编译入门级教程(arm64、mips64),感兴趣的朋友一起看看吧
    2023-11-11
  • C语言实现实时钟表

    C语言实现实时钟表

    这篇文章主要为大家详细介绍了C语言实现实时钟表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05

最新评论