首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言輸入函數對比補充:scanf 讀字符不丟棄換行符的實測驗證

     編輯:關於C語言

C語言輸入函數對比補充:scanf 讀字符不丟棄換行符的實測驗證

補充上篇:scanf("%c", &ch) **不會**跳過空白字符(含換行符),每次調用精確讀取緩衝區下一字節。

驗證代碼

#include <stdio.h>
int main() {
    char ch1, ch2, ch3, ch4;
    scanf("%c", &ch1); // 輸入 'h' + Enter → ch1='h',緩衝區剩 '\n'
    scanf("%c", &ch2); // 直接讀 '\n' → ch2='\n'
    scanf("%c", &ch3); // 等待新輸入
    scanf("%c", &ch4);
    printf("ch1=%c ch2=%c ch3=%c ch4=%c\n", ch1, ch2, ch3, ch4);
    return 0;
}

輸入與輸出

輸入:h⏎ ⏎ a⏎ b⏎
輸出:ch1=h ch2=
 ch3=a ch4=b

可見 ch2 吸收了第一次 Enter 留下的換行符。

對比 scanf("%s")

  • %s:跳過前導空白,讀取非空白序列,**留下後續空白**。
  • %c:**不跳過**,原樣讀取下一字節(含空白)。
  • %[^\n]:掃描集,讀取直到換行,**留下換行符**。

實用技巧

// 讀取單個非空白字符,自動跳過殘留換行/空格
scanf(" %c", &ch);  // 格式串前加空格!

// 讀取整行(含空格)
fgets(buf, sizeof(buf), stdin);
buf[strcspn(buf, "\n")] = 0; // 去換行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved