C語言中關于scanf函數(shù)的一些問題詳解
在學習創(chuàng)建二叉樹時遇到了scanf的一些問題,在此記錄下來
創(chuàng)建根節(jié)點A后理想情況是輸入A的左子樹,若不為空繼續(xù)創(chuàng)建左子樹,但輸入A后發(fā)現(xiàn)重復創(chuàng)建了一個左子樹,測試后發(fā)現(xiàn)輸入A換行后scanf函數(shù)接收了換行符(ASCII碼10)
若想按次序創(chuàng)建各個節(jié)點則需要使用getchar()吸收換行符
不接收換行符也可以輸入一個完整的二叉樹序列,也可以成功創(chuàng)建。
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); } }
測試后發(fā)現(xiàn)若有多個scanf()例如
輸入AB換行,多余的scanf會接收換行符。
若是Int類型換行不被接收,因為換行符可以作為字符被接收,
在多個scanf的情況下可以一行輸入多個數(shù)據,會依次接收這些數(shù)據,
第一行輸入1,2,兩個scanf接收了1,2;
總結
Scanf傳遞字符會接收換行符,避免則須在換行時吸收多余傳遞的換行符,(getchar傳遞字符同理),若有多個scanf(如循環(huán),嵌套)允許一次輸入多個數(shù)據,scanf依次接收它們。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
C++中靜態(tài)成員函數(shù)與靜態(tài)成員變量(static )
這篇文章主要介紹了C++中靜態(tài)成員函數(shù)與靜態(tài)成員變量(static )的相關資料,需要的朋友可以參考下2017-06-06