複製鏈接
請複製以下鏈接發送給好友

掃描集

鎖定
ANSIC 標準向 scanf() 增加了一種新特性,稱為掃描集(scanset)。掃描集定義一個字符集合,可由 scanf() 讀入其中允許的字符並賦給對應字符數組。掃描集合由一對方括號中的一串字符定義,左方括號前必須綴以百分號。
中文名
掃描集
外文名
scanset
實    質
字符集合
資料來源
scanf掃描集”的初體驗
類    型
計算機術語
作用
具體作用是:如果輸入的字符屬於方括號內字符串中某個字符,那麼就提取該字符;如果一經發現不屬於就結束提取。該方法會自動加上一個'\0'到已經提取的字符後面。
下面來看一個簡單的關於scanf掃描集的例子:
#include<stdio.h>

intmain(intargc,char*argv[])
{
charstr[10];
printf("input:");
scanf("%[abc]",str);
printf("output:%s\n",str);
return0;
}
運行結果:
  1. input:abcdefg
  2. 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;
}
運行結果:
  1. input:1234cba
  2. 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;
}
運行結果:
  1. input:abcdefgGOD
  2. output:abcdefg [1] 
參考資料