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

C 語言 scanf 輸入被跳過:緩衝區殘留換行符解決方案

     編輯:程式設計綜合問答

現象

scanf("%s", name) 後,scanf("%c", &sex) 直接讀到換行符,未等待輸入。

原因

%s 讀取字串時以空白字元結束,但結束的空白字元(換行/空格)留在 stdin 緩衝區,下一個 %c 直接消費該字元。

三種解法

  1. 加空格跳過空白(推薦):
    scanf(" %c", &sex); // %c 前加一空格
    
  2. 呼叫 getchar() 吞掉換行:
    scanf("%s", name);
    getchar(); // 吸收換行
    scanf("%c", &sex);
    
  3. 改用 fgets + sscanf(最穩健):
    
    char line[100];
    fgets(line, sizeof(line), stdin);
    sscanf(line, "%s", name);
    fgets(line, sizeof(line), stdin);
    sscanf(line, " %c", &sex);
    

補充

  • Windows 下 fflush(stdin) 行為未定義,不可移植。
  • 若輸入可能包含空格,%s 不適用,必須用 fgets 或 %[^\n]。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved