C++ scanf() 标准输入函数
C++ 中的 scanf()
函数用于从标准输入(stdin
)读取数据。读取的数据存储在相应的变量中。
它定义 在 cstdio 头文件中。
示例
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int age;
cout << "请输入你的年龄: ";
// 从用户获取年龄
scanf("%d", &age);
// 打印年龄
cout << "年龄 = " << age;
return 0;
}
输出
请输入你的年龄: 39
年龄 = 39
scanf() 语法
scanf()
的语法是:
scanf(const char* format, ...);
scanf() 参数
scanf()
函数接受以下参数:
- format - 指向 C 字符串的指针,指定如何读取输入。它由以
%
开始的格式说明符组成。 - ... - 其他附加参数指定要打印的数据。它们按照格式说明符的顺序出现。
scanf() 返回值
- 如果成功,返回成功赋值的接收参数的数量。
- 如果在第一个接收参数被赋值之前发生匹配失败,返回
0
。 - 如果在第一个接收参数被赋值之前发生输入失败,返回
EOF
。
scanf() 函数原型
在 cstdio 头文件中定义的 scanf()
函数原型是:
int scanf(const char* format, ...);
格式字符串
scanf()
的 format
参数可以包含以 %
开始的格式说明符。格式字符串有以下部分:
- 非空白字符(除
%
外),每个字符都会消耗输入流中的一个相同字符。如果流上的下一个字符不相等,则可能导致函数失败。 - 空白字符 - 所有连续的空白字符被视为单个空白字符。此外,
'\n'
、'\t'
和' '
被视为相同。- 转换规范 - 遵循以下格式: - 开始的
%
字符指定了开始。 - 可选的
*
被称为 赋值抑制字符。如果存在此字符,scanf()
不会将结果赋值给任何接收参数。 width
- 一个可选的正整数,指定最大字段宽度。它指定scanf()
在执行当前转换规范时允许消耗的最大字符数。length
- 一个可选的长度修饰符,指定接收参数的大小。specifier
- 一个转换格式说明符。
...
- 接收数据的其他附加参数。它们按照格式说明符的顺序出现。
scanf() 格式说明符原型
scanf()
的格式说明符的一般格式为:
%[*][width][length]specifier
常见格式说明符
格式说明符 | 描述 |
---|---|
% | 匹配字面意义上的 % |
c | - 匹配单个字符或多个字符- 如果定义了 width ,则匹配确切的 width 字符数 |
s | - 匹配连续的非空白字符- 如果定义了 width ,则匹配确切的 width 字符数或直到找到第一个空白字符为止 |
[set] | - 匹配来自给定字符集的非空字符序列- 如果 set 开头有 ^ ,则匹配不在 set 中的所有字符 |
d | 匹配十进制整数 |
i | 匹配整数 |
o | 匹配无符号八进制整数 |
X 或 x | 匹配无符号十六进制整数 |
u | 匹配无符号十进制整数 |
A 或 a | 匹配浮点数 |
E 或 e | 匹配浮点数 |
F 或 f | 匹配浮点数 |
G 或 g | 匹配浮点数 |
n | 返回到目前为止读取的字符数 |
p | 匹配一个实现定义的字符序列,用以定义指针 |
示例:C++ scanf()
#include <cstdio>
int main () {
char name[50];
int age;
printf("Enter your name: ");
// 获取用户输入的姓名
scanf("%s", name);
printf("Enter your age: ");
// 获取用户输入的年龄
scanf("%d", &age);
// 打印姓名和年龄
printf("Hello %s, you are %d years old.", name, age);
return 0;
}
输出
Enter your name: Tim
Enter your age: 31
Hello Tim, you are 31 years old.