scanf()
是C语言中的一个输入函数。与printf()
函数一样,都被声明在头文件stdio.h
里,因此在使用scanf
函数时要加上#include <stdio.h>
。
函数原型
int scanf(const char * restrict format,…);
函数 scanf()
是从标准输入流stdin
(标准输入设备,一般指向键盘)中读内容的通用子程序,
可以说明的格式读入多个字符,并保存在对应地址的变量中。
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
函数返回值
scanf
函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF
。
scanf("%d %d",&a,&b);
函数返回值为int
型。
如果a和b都被成功读入,那么scanf
的返回值就是2;
如果只有a被成功读入,返回值为1;
如果a和b都未被成功读入,返回值为0;
如果遇到错误或遇到end of file,返回值为EOF
。
end of file为Ctrl+z 或者Ctrl+d。
在HDUOJ第一题设计scanf
的循环输入以及EOF
结束
while (~scanf("%d%d", &a, &b))
{
}
while (scanf("%d%d", &a, &b) != EOF)
{
}
正确读入a或者b,返回值为1,取反后为-2
正确读入a和b,返回值为2,取反后为-3
遇到错误或者遇到end of file,返回值为EOF,取反后为0,结束循环
while循环非0为真,0为假
格式指令说明
format指向的字符串包含的格式指令由以下字符序列组成 :
*
表示读入的数据将被舍弃,带有星号的指令不对应可变参数列表的任何数据。
域宽
以一个非零的十进制整数形式出现,表示该格式指令最多读入的字符
格式说明符
c | 读入域宽指定的数目个字符组成的字符序列(后面不会加上空字节),如果省略宽度则读入单字符。如%c或%1c读入单字符,%2c读入两个字符(后面不会加上空字节),以此类推。 |
---|---|
s | 读入一个的字符序列,后面会加上空字节。 |
d,u | 读入一个有符号(无符号)的十进制整数 |
o | 读入一个八进制整数 |
x,X | 读入一个十六进制的整数 |
p | 读入一个指针值 |
更多细节问题参考百度百科scanf细节
scanf