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

scanf 進階掃描集:[%...] 與 [%^...] 實戰解析

     編輯:關於C++

掃描集轉換規格:%[...] 與 %[^...]

scanf 格式字串中鮮為人知但極實用的轉換字元:掃描集。它允許精確控制輸入字元的接受範圍,解決標準 %s 無法讀取空白字元的痛點。

語法與行為

格式行為範例輸入 → 結果
%[字元集合] 僅提取屬於集合內的字元,遇不屬於者停止 輸入 1234werew → scanf("%[1234567890]", s) 得 "1234"
%[^字元集合] 提取不屬於集合的字元,遇屬於者停止 輸入 abc123 → scanf("%[^0-9]", s) 得 "abc"

兩者皆會自動在提取結果後附加 \0 結束符。

關鍵細節:方括號內不可有空格

scanf("%[ 1234567890 ]", s);  // 錯誤:空格會被視為掃描集成員
scanf("%[^ 1234567890]", s);  // 錯誤:同理

若需包含空格,請直接在集合中書寫空格字元(如 %[a-z ])。

經典應用:讀取整行(含空白)

char line[100];
scanf("%[^\n]", line);  // 讀取換行符前的所有字元,含空格、Tab

此技巧完美替代 gets(不安全)與 fgets(需處理換行符),是讀取整行輸入的標準做法。

完整範例程式

#include <stdio.h>
int main() {
    char strings[100];
    // 僅讀取數字
    scanf("%[1234567890]", strings);
    printf("Result: %s\n", strings);
    return 0;
}

總結

掃描集是 scanf 家族中最靈活的輸入解析工具,善用它能優雅處理各類格式化輸入場景,尤其擅長「讀取直到特定分隔符」的需求。下次面對複雜輸入格式時,請優先考慮 %[...] 與 %[^...]。

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