与标准库函数 printf 相对,C 语言提供标准库函数 scanf 用于获取输入。
int scanf(const char* restrict format, ...);
标准库函数 scanf 的第一个参数是一个 格式化字符串,其中以 % 开头的子串是格式化占位符;
之后可以携带任意数量的参数,这些参数按顺序根据格式化占位符读取输入。
其中:
%% 表示读取百分号(%)本身
%d 表示读取 int
%u 表示读取 unsigned int
%f 表示读取 float
%c 表示读取 char
示例:
#include <stdio.h>
int main(void)
{
int x = 0;
printf("请输入一个整数:");
scanf("%d", &x);
printf("你输入的是:%d\n", x);
return 0;
}
说明:
首先通过 printf 打印提示信息 "请输入一个整数:"
然后 scanf("%d", &x); 从输入中读取一个整数并写入 x;注意,参数是 &x 即 x 的地址
最后通过 printf 打印 x 的值
运行结果:
请输入一个整数:10
你输入的是:10
匹配字符集合用于指定匹配某些字符,其格式为 %[set]。例如:
%[abc] 只读取 a,b 或 c,遇到其它字符时停止匹配
%[^abc] 只读除了 a,b,c 以外的字符,遇到 a,b 或 c时停止匹配
%[a-z] 只读取小写字母,遇到其它字符时停止匹配
%[0-9] 只读取数字,遇到其它字符时停止匹配
在格式化占位符中,可以使用一个星号(*)表示赋值抑制,也就是将这段输入丢弃,而非写入接收参数。常用于从一段内容中提取部分内容
示例:
#include <stdio.h>
int main(void)
{
int green = 0;
printf("请输入 RGB 值:");
scanf("%*d, %d, %*d", &green);
printf("绿色通道为:%d\n", green);
return 0;
}
说明:
前后两个 %*d 各读取一个整数并丢弃
第二个 %d 读取一个整数,并写入接收参数 green
运行结果:
请输入 RGB 值:36, 35, 28
绿色通道为:35