日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言中關于scanf函數的一些問題詳解_C 語言

作者:風雪宜哉 ? 更新時間: 2022-03-21 編程語言

在學習創建二叉樹時遇到了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依次接收它們。

原文鏈接:https://blog.csdn.net/qq_45233119/article/details/122246808

欄目分類
最近更新