14.2.3 扫描集
对scanf函数而言,扫描集(Scanset)是个十分重要的概念。扫描集定义一个字符集合,可由scanf函数读入其中允许的字符并赋给对应字符数组。扫描集合由一对方括号中的一串字符定义,左方括号前必须加百分号。例如,以下的扫描集使scanf函数读入字符A、B和C组成字符串。
%[ABC]
使用扫描集时,scanf函数连续将当前输入流中属于扫描集合中的字符放入对应的字符数组,直到发现不在扫描集中的字符为止。返回时数组中放置以'\0'结尾并由读入字符组成的字符串。
对于许多实现来说,用连字符可以说明一个范围。例如,以下扫描集使scanf函数接受字母A~Z。
%[A-Z]
注意
扫描集是区分大小写的。因此,希望扫描大、小写字符时,应该分别说明大、小写字母。
如果扫描集中第一个字符是^,那么输入的字符串由除了扫描集中的元素组成,scanf函数连续将当前输入流中不属于扫描集合中的字符放入对应的字符数组,直到发现扫描集中的字符为止。比如%[^EOF]就是直到有EOF输入,字符串才会被终止。
一定要记住scanf输入是基于缓冲区的,如下扫描集所示。
%[^X],
在输入回车之前,输入多少个X都是不可能结束的。