今天在编写二叉树的代码的时候,发现一个奇怪的现象,代码如下:
bool CreateBiTree(BiTree *T) { char ch; printf("Node:"); scanf("%c", &ch); if (ch == '#') { *T = NULL; return false; } else { *T = (BiTNode*)malloc(sizeof(BiTNode)); if (!*T) return false; (*T)->data = ch; CreateBiTree(&(*T)->lchild); CreateBiTree(&(*T)->rchild); } printf("end\n"); }
运行的结果:
令人奇怪的是第二次还没有输入便开始了第三次的函数运行,后来搜索发现第一次的输入其实是 ’a‘ 和 ’\n' 两个字符,因此第二次默认接收的是回车。
scanf() 函数是格式输入函数,按用户指定的格式将数据输入到相应的变量,在scanf() 语句的格式串中由于没有非格式字符在“%d%d%d”之间作为输入时的间隔,因此在输入时要用一个以上的空格或回车符作为每两个输入数之间的间隔,scanf()在读取数字时会跳过空格、制表符和换行符。
getchar() 函数是键盘输入函数,其功能是从键盘上输入一个字符。简单来说就是getchar()函数在C程序中的功能是接收一个字符。
因此可以在scanf() 语句的后面加上 getchar(); 这样可以将 '\n' 吸收。
运行结果为: