-
掃描集
鎖定
ANSIC 標準向 scanf() 增加了一種新特性,稱為掃描集(scanset)。掃描集定義一個字符集合,可由 scanf() 讀入其中允許的字符並賦給對應字符數組。掃描集合由一對方括號中的一串字符定義,左方括號前必須綴以百分號。
- 中文名
- 掃描集
- 外文名
- scanset
- 實 質
- 字符集合
- 資料來源
- scanf掃描集”的初體驗
- 類 型
- 計算機術語
作用
下面來看一個簡單的關於scanf掃描集的例子:
#include<stdio.h> intmain(intargc,char*argv[]) { charstr[10]; printf("input:"); scanf("%[abc]",str); printf("output:%s\n",str); return0; }
運行結果:
- input:abcdefg
- output:abc
從結果我們可以看出,scanf只接受了abc這三個字符,並沒有接受除方括號內字母之外的字符。而且輸出時只輸出了abc,並沒有輸出其它亂碼,可見其已在abc後自動加入了'\0'。
在“[]”內,還可以加入另外一個字符來修飾它的作用:“^”。這個符號可以理解為“補集”,即,掃描除方括號之內的其它字符:如果輸入的字符不屬於方括號內字符串中某個字符,那麼就提取該字符;如果一經發現輸入的字符屬於該字符,則結束。接下來對上面的例子做一個小修改,再來看一下這種“補集”用法:
#include<stdio.h> intmain(intargc,char*argv[]) { charstr[10]; printf("input:"); scanf("%[^abc]",str); printf("output:%s\n",str); return0; }
運行結果:
- input:1234cba
- output:1234
從這個結果可以看出,除了"abc"之外的字符已經順利地被scanf所接受,而一遇到"[]"內的字符——abc,則立即結束掃描,將之前掃描到的字符存儲到數組str中。
但是,如果我們想在遇到大寫字母的時候就停止輸入,難道我們要在方括號中寫上ABCDEFGHIJK……UVWXYZ嗎?
當然不,如果真的要這樣做,那這就不是我們偉大的C語言了。我們可以這樣來進行縮寫:[^A-Z]
#include<stdio.h> intmain(intargc,char*argv[]) { charstr[20]; printf("input:"); scanf("%[^A-Z]",str); printf("output:%s\n",str); return0; }
運行結果:
- input:abcdefgGOD
- 參考資料
-
- 1. “scanf掃描集”的初體驗 .新浪博客.2013-07-21[引用日期2013-07-22]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:11次歷史版本
- 最近更新: creamone119