C 语言 Scanset

2024 年 8 月 28 日 | 3 分钟阅读

%[] 符号 表示 scanf 系列 函数支持的 扫描集说明符。你可以在 扫描集 中提供 单个字符 或一个字符范围。在处理过程中,只有属于 扫描集 的字符才会被 scanf() 函数 处理。你可以通过将字符括在方括号中来定义扫描集。

通过在所需字符和 扫描集 之间使用 逗号,你也可以使用这种方法。

例如

它将 扫描 所提供的 扫描集 中的所有字符。让我们通过一个例子来看看扫描集。在下面的例子中,字符数组 'str' 将只包含大写字母;任何其他字符都不会被保留在那里。

示例 1

与特定字符匹配

假设你只想读取 数字输入(0 到 9)。这将是一个 %[0-9] 的扫描集。这是一个示例:

输出

Enter a number: 12345
You entered: 12345

示例 2

匹配字母字符

你可以使用 %[a-zA-Z] 来读取只包含 字母字符(a 到 z 和 A 到 Z)的字符串。这是一个示例:

输出

Enter a word: javatpoint
You entered: javatpoint

示例 3

精确匹配一组字符

扫描集 内,你可以定义多个字符进行匹配。例如,你可以使用 %[0-9A-Z] 来读取只包含大写字母和数字的字符串。这是一个示例:

输出

Enter a string (digits and uppercase letters only): HELLO1234
You entered: HELLO1234

示例 4

直到找到特定字符才匹配字符

你可以在 扫描集 的开头使用 符号 来反转匹配行为。它将继续读取,直到遇到请求的字符。例如,你可以使用 %['n'] 来读取字符串,直到找到换行符。

输出

Enter a sentence (ends with Enter key): Hello world!
You entered: Hello world!

示例 5

让我们使用扫描集来实现 gets() 函数gets() 方法 从标准输入 (stdin) 读取行到由扫描集指向的缓冲区,直到检测到终止换行符或 EOF

输出

Enter a string with spaces: hello world
You entered: hello world

注意:永远不要使用 gets() 方法gets() 将在缓冲区末尾之后继续存储字符,这使得在不提前了解数据的情况下,很难预测它会读取多少字符。它已被用于规避计算机安全。请改用 fgets() 函数