首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言二叉樹創建遞歸輸入卡死?scanf_s 緩衝區處理與遞歸終止條件

     編輯:程式設計疑難解答

現象

調用 CreateBiTree 輸入字符后按 Enter,程序無響應(卡死)。

原因分析

  • scanf_s("%c", &ch) 讀取單字符,但不跳過空白字符(包括換行符 \n)。
  • 首次調用讀到有效字符,遞歸調用時緩衝區殘留 \n,直接讀取到 \n 作為節點數據,導致邏輯混亂或無限遞歸。

解決方案

方案一:格式串前置空格跳過空白

scanf_s(" %c", &ch, 1); // %c 前加空格,自動跳過 \n、空格、制表符

方案二:額外讀取並丟棄換行符

scanf_s("%c", &ch, 1);
getchar(); // 吞掉緩衝區殘留的 \n

方案三:改用 gets/fgets 讀整行再解析(推薦)

char line[100];
fgets(line, sizeof(line), stdin);
sscanf(line, "%c", &ch);

遞歸終止條件檢查

確保 ch == '#' 時返回 NULL,且分配內存失敗時 exit(0) 或返回錯誤碼。

參考資源

二叉樹創建 scanf_s 緩衝區問題詳細解析

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved