这篇文章主要为大家介绍了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语言中关于scanf函数的一些问题详解


基础教程推荐
猜你喜欢
- 如何C++使用模板特化功能 2023-03-05
- C利用语言实现数据结构之队列 2022-11-22
- C语言基础全局变量与局部变量教程详解 2022-12-31
- 详解c# Emit技术 2023-03-25
- 一文带你了解C++中的字符替换方法 2023-07-20
- C/C++编程中const的使用详解 2023-03-26
- C语言 structural body结构体详解用法 2022-12-06
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C++详细实现完整图书管理功能 2023-04-04
- C++中的atoi 函数简介 2023-01-05