C++ 中的 scanf()
函数用于从标准输入 (stdin
) 读取数据。读取的数据被存储在相应的变量中。
它定义在 cstdio 头文件中。
示例
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
int age;
cout << "Enter your age: ";
// get age from user
scanf("%d", &age);
// print age
cout << "Age = " << age;
return 0;
}
输出
Enter your age: 39 Age = 39
scanf() 语法
scanf()
的语法是
scanf(const char* format, ...);
scanf() 参数
scanf()
函数接受以下参数
- format - 一个 C 字符串的指针,指定如何读取输入。它包含以
%
开头的格式说明符。
- ... - 指定要打印数据的其他附加参数。它们按照格式说明符的顺序出现。
scanf() 返回值
- 如果成功,它返回成功赋值的接收参数的数量。
- 如果在赋值第一个接收参数之前发生匹配失败,则返回
0
。 - 如果在赋值第一个接收参数之前发生输入失败,则返回
EOF
。
scanf() 原型
scanf()
函数的原型定义在 cstdio 头文件中,如下所示:
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: ");
// get user input for name
scanf("%s", name);
printf("Enter your age: ");
// get user input for age
scanf("%d", &age);
// print name and 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.
另请阅读