C stdio scanf() 函数
示例
输出用户输入的数字:
// 创建一个整型变量,用于存储从用户那里获取的数字。
int myNum;
// 请用户输入一个数字
printf("Type a number: ");
// 获取并保存用户输入的数字。
scanf("%d", &myNum);
// 输出用户输入的数字。
printf("Your number is: %d", myNum);
亲自试一试 »
定义和用法
scanf() 函数读取用户输入并将其写入参数指定的内存位置。
scanf() 函数定义在 <stdio.h> 头文件中。
format参数是一个字符串,用于描述预期数据的格式。如果用户输入的格式与此不匹配,则函数会在遇到第一个不匹配项时停止读取。
注意:更准确地说,它从stdin指定的位置读取数据,该位置通常是键盘输入,但也可以配置为指向文件或其他位置。
格式说明符
格式字符串可以包含格式说明符,用于指定用户输入的哪些部分应写入参数。每个格式说明符对应于函数的一个附加参数。
格式说明符的格式为%[*][width][length]格式说明符。方括号内的组成部分是可选的。
各组件说明:
*- 可选。如果存在,格式说明符不对应任何参数。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 or a |
浮点数 | 读取有效的字符序列并将其解释为浮点数。有效的序列至少包含一位数字,前面可以有符号("+"或"-"),后面可以有小数点和小数位。也可以使用科学计数法(一个数字后跟"e"或"E"以及一些数字)。 |
c |
字符 | 从文件中读取一个字符。如果指定了宽度,则读取指定数量的字符。 |
s |
字符串 | 从用户输入中读取直到下一个空白字符(空格、制表符、换行符)的所有字符。写入参数的值将附加一个空终止符 \0。 |
p |
指针 | 读取表示指针地址的字符序列。 |
n |
无输入(No input) | 不读取任何内容,而是将当前读取的字符数写入参数。参数必须是指向整数的指针。 |
% |
百分号 | 从用户输入中读取一个字符,期望为"%"符号。此说明符不与参数关联。 |
[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 ", a);
printf("b = %d ", b);
printf("c = %d ", c);
示例
读取一个十六进制数,并输出其十进制值:
int num;
scanf("%x", &num);
printf("%d", num);
示例
在用户输入中搜索"x"、"y"或"z":
char c;
int found = scanf("%[xyz]", &c);
if(found > 0) {
printf("Found %c", c);
} else {
printf("Character not found");
}

