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

C 語言字符串查找字符:scanf 留存換行符導致 gets 讀取空串

     編輯:程式設計綜合問答

代碼:

scanf("%c", &x);
gets(ab);  // 讀到空字符串

原因

scanf("%c") 讀取字符後,換行符 '\n' 留在輸入緩衝區。隨後 gets() 讀取首個字符即為 '\n',以為是空行結束,返回空字符串。

解決方案 (三選一)

  1. 消耗換行符:
    scanf("%c", &x);
        getchar();  // 吃掉 \n
        gets(ab);
        
  2. scanf 格式字符串加空格 (跳過空白符):
    scanf(" %c", &x);  // %c 前有空格,自動跳過 \n/空格/Tab
        gets(ab);
        
  3. 統一用 fgets + sscanf (推薦,安全):
    char line[100];
        fgets(line, sizeof(line), stdin);
        sscanf(line, "%c", &x);
        fgets(ab, sizeof(ab), stdin);
        

關鍵點

  • gets() 已棄用 (C11 移除),不安全 (無長度限制),請用 fgets()。
  • scanf("%c") 不跳過空白符,scanf(" %c") 會跳過。
  • 混用格式化輸入與行讀取時,務必處理殘留換行符。

在 scanf("%c") 後加 getchar() 或改用 scanf(" %c"),gets/fgets 即可正常讀取下一行。

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