Menu
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C stdio scanf() 函数

❮ C stdio 库


示例

输出用户输入的数字

// 创建一个整数变量,用于存储我们从用户那里获得的数字
int myNum;

// 要求用户输入一个数字
printf("输入一个数字:\n");

// 获取并保存用户输入的数字
scanf("%d", &myNum);

// 输出用户输入的数字
printf("您的数字是:%d", myNum);
自己尝试 »

定义和用法

函数 scanf() 读取用户输入,并将输入写入由参数指定的内存位置。

函数 scanf()<stdio.h> 头文件中定义。

参数 format 是一个字符串,用于描述预期数据的格式。如果用户输入与格式不匹配,则函数将在第一个不匹配的位置停止读取。

注意: 更准确地说,它是从由 stdin 指定的位置读取的,通常是键盘输入,但它可能被配置为指向文件或其他位置。

格式说明符

字符串 format 可以包含格式说明符,用于指定用户输入的哪些部分应该写入参数。每个格式说明符对应于函数的一个附加参数。

格式说明符的形式为 %[*][width][length]specifier。方括号中的组件是可选的。

每个组件的说明

  • * - 可选。存在时,格式说明符不对应任何参数。
  • 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)。序列前面可以带有一个符号(“+”或“-”)。
du 十进制整数 读取一个数字序列(0-9),并将其解释为一个整数。序列前面可以带有一个符号(“+”或“-”)。
o 八进制整数 读取一个数字序列(0-7),并将其解释为一个八进制整数。序列前面可以带有一个符号(“+”或“-”)。
x 十六进制整数 读取一个数字序列(0-9 和 A-F),并将其解释为一个十六进制整数。它可能以“0x”开头。序列前面可以带有一个符号(“+”或“-”)。
fega 浮点数 读取一个有效的字符序列,并将其解释为一个浮点数。一个有效的序列至少包含一个数字,可以带有一个符号(“+”或“-”),后面可以带一个小数点和小数数字。还可以使用科学计数法(一个数字后面跟着“e”或“E”和一些数字)。
c 字符 从文件读取一个字符。如果指定了宽度,则读取该数量的字符。
s 字符串 从用户输入中读取所有字符,直到下一个空白字符(空格、制表符、换行符)。写入参数的值将附加一个额外的 \0 空字符。
p 指针 读取一个表示指针地址的字符序列。
n 没有输入 不读取任何内容,而是将到目前为止读取的字符数量写入参数。参数必须是指向整数的指针。
% 百分号 从用户输入中读取一个字符,期望为“%”符号。此说明符不与任何参数关联。
[characters] 字符集 读取一个字符,该字符与 characters 中指定的字符之一匹配。
[^characters] 排除的字符集 读取一个字符,该字符不在 characters 中指定的字符集中。

有关如何使用格式说明符的示例,请参见下面的“更多示例”。


语法

scanf(const char * format, arg1, arg2...);

参数值

参数 描述
format 必需。一个字符串,表示预期从用户输入中获取的数据的格式。
arg1arg2... 可选。任意数量的附加参数,它们是指向可写入值的内存的指针。

技术细节

返回值 一个 int 值,表示写入的参数数量。如果发生错误,则返回常量 EOF

更多示例

示例

从用户提供的任何序列“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);

示例

读取一个十六进制数字,并以十进制输出其值

int num;
scanf("%x", &num);
printf("%d", num);

示例

在用户输入中搜索“x”、“y”或“z”

char c;
int found = scanf("%[xyz]", &c);
if(found > 0) {
  printf("找到了 %c", c);
} else {
  printf("字符未找到");
}

❮ C stdio 库

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.