跳到主要内容

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匹配无符号八进制整数
Xx匹配无符号十六进制整数
u匹配无符号十进制整数
Aa匹配浮点数
Ee匹配浮点数
Ff匹配浮点数
Gg匹配浮点数
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.