scan中的扫描集行为

时间:2012-07-24 13:41:18

标签: c scanf

我尝试在scanf中使用scanset做一些事情但是卡在某处。

当我写

char s1[250];
scanf("%[A-Z]s",s1);

input : AHJHkiuy
Output: AHJH

并且用这个,

scanf("%[^\n]s",s1);

input: abcd ABCD hie
output: abcd ABCD hie       /*that is reading white space also (till \n) */

现在我的问题是,如果我提供输入:

ABCDahaj ahajABCD ajak12347ab

并希望输出为:

ABCDahaj ahajABCD ajak

那么格式字符串应该怎么写?也就是说,该如何使用这个扫描设置?

3 个答案:

答案 0 :(得分:5)

您可以稍微扩展您的示例并实现目标。

scanf("%[A-Za-z ]", s1);

答案 1 :(得分:1)

另一种方法是:

scanf("%[^0-9]", s1); /* Scans everything until a digit */

答案 2 :(得分:0)

  1. 单字符输入字符串: scanf(“%s”,str); //普通的字符串输入 scanf(“%[a] s”,str); //使用scanset 上面的语句提到输入字符串的值是'a'或'aaa'等。(区分大小写-敏感)。
  2. 提供一系列字符:“-”符号用于表示字符集。 scanf(“%[0–9] s”,str); //使用scanset 上面的陈述提到输入字符串的值在“ 0”到“ 9”之间。任何其他组合都将被忽略。
  3. 排除字符:克拉或抑扬符号(^)用于从输入中排除符号。 scanf(“%[^ A] s”,str); //使用scanset 上面的语句提到输入字符串可以包含除“ A”(区分大小写的敏感字符)之外的任何字符。
  4. 通过scanset进行单行输入: scanf(“%[^ \ n] s”,str); //使用scanset 该语句接受输入,直到输入中出现换行符('\ n)为止。
  5. 进行多行输入:这是上述第三种用法的一种用法。假设您想输入一个段落或一组单词。普通scanf仅扫描第一个单词 但是,通过使用scanset,我们可以提供段落的输入并将其存储为一个完整的字符串。我们必须假设一个断点-指向该段(在本例中为“ +”符号),然后输入。 scanf(“%[^ +] s”,str); //使用scanset