C stdio scanf() 函数
示例
输出用户输入的数字
// 创建一个整数变量,用于存储我们从用户那里获得的数字
int myNum;
// 要求用户输入一个数字
printf("输入一个数字:\n");
// 获取并保存用户输入的数字
scanf("%d", &myNum);
// 输出用户输入的数字
printf("您的数字是:%d", myNum);
自己尝试 »
定义和用法
函数 scanf()
读取用户输入,并将输入写入由参数指定的内存位置。
函数 scanf()
在 <stdio.h>
头文件中定义。
参数 format 是一个字符串,用于描述预期数据的格式。如果用户输入与格式不匹配,则函数将在第一个不匹配的位置停止读取。
注意: 更准确地说,它是从由 stdin
指定的位置读取的,通常是键盘输入,但它可能被配置为指向文件或其他位置。
格式说明符
字符串 format 可以包含格式说明符,用于指定用户输入的哪些部分应该写入参数。每个格式说明符对应于函数的一个附加参数。
格式说明符的形式为 %[*][width][length]specifier
。方括号中的组件是可选的。
每个组件的说明
*
- 可选。存在时,格式说明符不对应任何参数。width
- 可选。指定为此说明符读取的字符的最大数量。length
- 可选。一个字符序列,用于更改参数的数据类型。它可以是以下之一hh
- 对于整数,预期为char*
类型。h
- 对于整数,预期为short*
类型。l
- 对于整数,预期为long int*
类型。
对于字符和字符串,预期为wchar_t*
类型。
对于浮点数,预期为double*
类型。ll
- 对于整数,预期为long long int*
类型。j
- 对于整数,预期为intmax_t*
或uintmax_t*
类型。z
- 对于整数,预期为size_t*
类型。t
- 对于整数,预期为ptrdiff_t*
类型。L
- 对于整数,预期为long double*
类型。
specifier
- 必需。一个字符或序列,用于指示如何解释用户输入。可能的说明符列表如下表所示。
说明符列表
字符 | 说明符 | 描述 |
---|---|---|
i |
整数 | 读取一个数字序列,并将其解释为一个整数。如果序列以“0x”开头,则它期望十六进制数字(0-9 和 A-F)。如果序列以“0”开头,则它期望八进制数字(0-7)。序列前面可以带有一个符号(“+”或“-”)。 |
d 或 u |
十进制整数 | 读取一个数字序列(0-9),并将其解释为一个整数。序列前面可以带有一个符号(“+”或“-”)。 |
o |
八进制整数 | 读取一个数字序列(0-7),并将其解释为一个八进制整数。序列前面可以带有一个符号(“+”或“-”)。 |
x |
十六进制整数 | 读取一个数字序列(0-9 和 A-F),并将其解释为一个十六进制整数。它可能以“0x”开头。序列前面可以带有一个符号(“+”或“-”)。 |
f 、e 、g 或 a |
浮点数 | 读取一个有效的字符序列,并将其解释为一个浮点数。一个有效的序列至少包含一个数字,可以带有一个符号(“+”或“-”),后面可以带一个小数点和小数数字。还可以使用科学计数法(一个数字后面跟着“e”或“E”和一些数字)。 |
c |
字符 | 从文件读取一个字符。如果指定了宽度,则读取该数量的字符。 |
s |
字符串 | 从用户输入中读取所有字符,直到下一个空白字符(空格、制表符、换行符)。写入参数的值将附加一个额外的 \0 空字符。 |
p |
指针 | 读取一个表示指针地址的字符序列。 |
n |
没有输入 | 不读取任何内容,而是将到目前为止读取的字符数量写入参数。参数必须是指向整数的指针。 |
% |
百分号 | 从用户输入中读取一个字符,期望为“%”符号。此说明符不与任何参数关联。 |
[characters] |
字符集 | 读取一个字符,该字符与 characters 中指定的字符之一匹配。 |
[^characters] |
排除的字符集 | 读取一个字符,该字符不在 characters 中指定的字符集中。 |
有关如何使用格式说明符的示例,请参见下面的“更多示例”。
语法
scanf(const char * format, arg1, arg2...);
参数值
参数 | 描述 |
---|---|
format | 必需。一个字符串,表示预期从用户输入中获取的数据的格式。 |
arg1、arg2... | 可选。任意数量的附加参数,它们是指向可写入值的内存的指针。 |
技术细节
返回值 | 一个 int 值,表示写入的参数数量。如果发生错误,则返回常量 EOF 。 |
---|
更多示例
示例
从用户提供的任何序列“a + b = c”中提取数字
int a, b, c;
scanf("%i + %i = %i", &a, &b, &c);
printf("a = %d \n", a);
printf("b = %d \n", b);
printf("c = %d \n", c);
示例
读取一个十六进制数字,并以十进制输出其值
int num;
scanf("%x", &num);
printf("%d", num);
示例
在用户输入中搜索“x”、“y”或“z”
char c;
int found = scanf("%[xyz]", &c);
if(found > 0) {
printf("找到了 %c", c);
} else {
printf("字符未找到");
}