scanf -- 格式化输入
scanf 函数文档函数概要:
scanf 函数从标准输入流中读取格式化字符串。
与 printf 格式化输出函数相反,scanf 函数是格式化输入函数。
函数原型:
#include <stdio.h>
...
int scanf(const char *format, ...);
参数解析:
1、format 参数
format 参数是一个格式化字符串,由格式化占位符和普通字符组成。
该格式化字符串指定如何处理读取到的数据:
[*]空白字符:该函数将读取并忽略空白字符(空白字符包含空格、回车和制表符);
[*]除了格式占位符(% 开头)外的非空白字符:指定函数必须从输入流中读取到的字符,如果读取不匹配,则函数调用失败,并从匹配失败处截断输入流;
[*]格式化占位符(% 开头):用于指明获取的数据类型及位置。
格式化占位符的语法如下:
%specifier
每一个格式化占位符均以 % 开始,以转换字符结束。
specifier(转换字符,必选)的内容及含义如下:
转换字符含义
c读取一个字符
d读取一个十进制整数,前边可以加上符号(+ 或 -)表示正负
i1. 读取一个整数,前边可以加上符号(+ 或 -)表示正负
2. 0 开头表示八进制数,0x 开头表示十六进制数
e读取一个以指数形式的单、双精度浮点数(小写 e)
E同上(大写 E)
f读取一个单、双精度浮点数(需要使用 lf),前边可以加上符号(+ 或 -)表示正负
g同 f、e、E
G同上(指数显示大写 E)
a读取一个十六进制的浮点数(以 0x 或 0X 开头)
o读取一个八进制整数,前边可以加上符号(+ 或 -)表示正负
s读取一连串字符,直到遇到空白字符结束。
u读取一个无符号的十进制整数
x1. 读取一个十六进制整数,前边可以加上符号(+ 或 -)表示正负
2. 十六进制数以 0x 或 0X 开头
p读取一个指针的值
1. 匹配中括号括起来的字符集
2. 可以用小横杆(-)表示范围,比如
[^characters]1. 匹配除了中括号括起来的字符集
2. 可以用小横杆(-)表示范围,比如
n1. 存放已经读取的字符个数
2. 不消耗任何标准输入流的字符
%表示匹配 % 自身
注1:除了 n,其他的每次读取都会至少消耗标准输入流中的一个字符。
注2:如果读取失败,则标准输入流截断于读取失败的位置。
星号(*)、width 和 length 是可选的。
[*]星号(*)表示读取但忽略(读取但不保存);
[*]width 指定当前读取操作的最大字符数;
[*]length 是用于限定不同类型的宽度,具体请参考下表:
length d 或 iu、o 或 xf、e、g 或 ac、s、[] 或 [^]pn
默认int*unsigned int*float*char*void**int*
hhsigned char*unsigned char* signed char*
hshort int*unsigned short int* short int*
llong int*unsigned long int*double*wchar_t* long int*
lllong long int*unsigned long long int* long long int*
jintmax_t*uintmax_t* intmax_t*
zsize_t*size_t* size_t*
tptrdiff_t*ptrdiff_t* ptrdiff_t*
L long double*
小甲鱼温馨提示:因为整理自官方文档,所以出现了很多暂时你还不认识的东东,不用怕,暂时忽视他们即可……
2、... 附加参数
该参数的个数由格式化字符串决定。
每个参数均为一个存储空间,并与面格式化字符串中占位符的类型和位置一一对应。
如果是一个普通的变量名,应在其名字前边加上 & 符号。
返回值:
如果函数调用成功,返回值是成功获取并填充到附加参数中的个数。
如果函数调用失败,返回值小于附加参数的个数(甚至是 0)。
如果读取到标准输入流的结尾处,则返回 EOF。
演示:
#include <stdio.h>
int main()
{
char c;
int i;
int j;
scanf("%c%d%x", &c, &i, &j);
printf("变量c的值是:%c\n", c);
printf("变量i的值是:%d\n", i);
printf("变量j的值是:%#X(%d)\n", j, j);
return 0;
}
版权归鱼C工作室(www.fishc.com)所有,转载请注明来源!
cin 赞一个 ,, 会用,半懂。。。 附加参数里边说,如果是普通变量名,之前加&
何为普通变量名?? 学习了 学习,学习{:10_257:} 看看 学习了 小菜鸟222 发表于 2016-8-11 09:48
看看 学习了
哈哈哈爽 感觉c语言打的代码量好多Python就简洁多了{:5_91:} 好好学 scanf其实和C++里面的cin<<差不多,就是前者打起来很费劲。 aa 返回值的意思有点模糊,意思是scanf(%d)的话,如果只输入abcdef。。返回值就一定是0.只要输入了数字,返回值就一定是1?这样解释吗? 0、比特
1、2的7次方-1
2、8的64次方
3、-3.40282×10的38次方
4、
12
204
120
255
0
5、
1000
11011
1100011
1000
10000010
#include<stdio.h>
int main()
{
int i;
unsigned int j;
i = 255;
j = 255;
int c;
scanf("%d",&c);
printf("%d\n",c);
printf("%d\n",i);
printf("%d\n",j);
return 0;
}
1 转换字符这么多{:5_99:} #X 这里可以直接输入x. 我在Linux下怎么不能执行 说实在看不懂哟==