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