函数声明
int scanf(const char *format, ...);
说明
<返回值> scanf ("<格式化字符串>", <参数表>);
返回值
scanf 返回成功读入的变量个数,读到文件末尾或发生错误返回EOF。
如
int n, m;
scanf("%d%d", &n, &m);
scanf("%d%d", &n, &m);
输入
3 4
3
^Z
/*Windows系统终端下以^Z即Ctr+Z代表EOF*/
返回值为 分别为 2 和 1
又如
int n;
scanf("%d", &n);
输入
^Z
返回值为 -1 ( -1 即 EOF 的值, 使用 printf 即可看到)
格式化字符串
格式
%[width][modifiers]
说明
每个%分别对应控制参数表中每个变量的输入格式(%%除外, * 亦对应一个变量);
除%引导的部分外,可加入任意输入格式有关的字符;
width指定了在当前读取操作中读取的最大字符数,可省略;
modifiers | 参数类型 | 含义 |
---|---|---|
d | char型,int型 | 读入一个十进制整数 |
o | int型,unsigned int型 | 读入一个八进制整数 |
x,X | int型,unsigned int型 | 读入一个十六进制整数 |
u | unsigned int型 | 读入一个十进制整数 |
lld | long long型 | 读入一个十进制整数 |
llu | unsigned long long型 | 读入一个十进制整数 |
c | char型,int型 | 读入单个字符,若 width 不为 1 ,则读取 width 个字符并存储在数组中连续位置。但末尾不会追加空字符。 |
s | char *型 | 读入一个字符串,读到空白符结束,末尾追加 '\0' |
f | float型 | 读入一个十进制实数 |
lf | double型 | 读入一个十进制实数 |
e,E | float型,double型 | 用指数形式读入一个十进制实数 |
g,G | float型,double型 | 读入一个十进制小数 |
p | void *型 | 读入一个指针 |
[ ] | / | 扫描字符集合 |
% | 不转换参数 | 读入一个% |
参数表
参数表中形参的数量和类型与格式化字符串相适应,否则读入可能发生异常
每个形参用逗号( , )隔开
示例
#include<stdio.h>
int main()
{
double a, b;
int d, e;
char ch, c[100];
scanf("%d%d", &d, &e); /*两个数字之间应当用空白符分开*/
scanf("(%d,%d)", &d, &e);
scanf("(%d,%d)", &d, &e);
scanf("(%d,%d)", &d, &e);
scanf("%2d%d", &d, &e);
scanf("%lf%lf", &a, &b);
scanf("%4lf%lf", &a, &b); /*注意小数点占一个字符*/
scanf("%c", &ch);
scanf("Hello World%s", c);
scanf("%11c", c);
return 0;
}
输入示例
3 3 /*变量中值分别为 3 和 3*/
(3,3) /*变量中值分别为 3 和 3*/
( 3 , 3 ) /*多空格可以正常读入,为 3 和 3,但不规范*/
(3,,3) /*多逗号读入出错,第一个变量为 3 而第二个则无法成功读入*/
2019 /*变量中值分别为 20 和 19*/
3.14 3.14 /*变量中值分别为 3.14 和 3.14*/
3.143.14 /*变量中值分别为 3.14 和 3.14*/
a /*变量中值为 'a' (实际储存为字符'a'的Ascii码)*/
Hello WorldHelloWorld /*变量中值为 HelloWorld\0 (以'\0'作为串结束符)*/
Hello World /*变量中值为 Hello World (没有串结束符,不能直接printf)*/
by sdust weilinfox