掃描集

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

相關詞條

熱門詞條

聯絡我們