C語言中關(guān)于scanf函數(shù)的一些問題詳解
在學(xué)習(xí)創(chuàng)建二叉樹時遇到了scanf的一些問題,在此記錄下來
創(chuàng)建根節(jié)點(diǎn)A后理想情況是輸入A的左子樹,若不為空繼續(xù)創(chuàng)建左子樹,但輸入A后發(fā)現(xiàn)重復(fù)創(chuàng)建了一個左子樹,測試后發(fā)現(xiàn)輸入A換行后scanf函數(shù)接收了換行符(ASCII碼10)
若想按次序創(chuàng)建各個節(jié)點(diǎn)則需要使用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類型換行不被接收,因?yàn)閾Q行符可以作為字符被接收,
在多個scanf的情況下可以一行輸入多個數(shù)據(jù),會依次接收這些數(shù)據(jù),
第一行輸入1,2,兩個scanf接收了1,2;
總結(jié)
Scanf傳遞字符會接收換行符,避免則須在換行時吸收多余傳遞的換行符,(getchar傳遞字符同理),若有多個scanf(如循環(huán),嵌套)允許一次輸入多個數(shù)據(jù),scanf依次接收它們。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
C++中靜態(tài)成員函數(shù)與靜態(tài)成員變量(static )
這篇文章主要介紹了C++中靜態(tài)成員函數(shù)與靜態(tài)成員變量(static )的相關(guān)資料,需要的朋友可以參考下2017-06-06C++實(shí)現(xiàn)職工工資管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單的職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Cmake中強(qiáng)大的輸出函數(shù)message示例解析
這篇文章主要介紹了Cmake中強(qiáng)大的輸出函數(shù)message解析,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05C語言中的狀態(tài)機(jī)設(shè)計(jì)深入講解
這篇文章主要給大家介紹了關(guān)于C語言狀態(tài)機(jī)設(shè)計(jì)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11