众所周知scanf(格式说明符,地址列表)可不包含头文件stdio.h, 与printf的函数相同,不能显示非格式字符串,也就是不显示提示字符串。
格式:scanf("格式控制字符",& )其中&(地址的运算符)表示的是and
这也就是c语言的不同与java之处
1、*表示的是该输入项,读入后不赋予任何变量。相当于删除的意思吧
由上图我们可以看出自动把4跳过去了,说明%*d有跳过的意思,因为只有两个取地址符号,说明只是输出两个整型变量
宽度: 用十进制整数指定输入的宽度(即字符数),当实际输入小于所打宽度,前面补空格,但是如果实际输入数据大于所打宽度,按照原数输出
但是不能用scanf控制精度输出,例如scanf("%7.2d",&a); 用此函数控制输出函数为宽度为7,保留2位小数的数,是非法的(也就是错的)
2,对于格式控制字符的研究
再输入字符数据时,若格式控制串中无非格式字符,则认为所有输入字符均为有效字符
比如scanf("%d%d%d",&a,&b,&c);
当你输入a(空格)b(空格)c时
只会输出a b,只是因为自动将d赋值给a,空格赋值给b,e赋值给了c
但是当你scanf("%d %d %d",&a,&b,&c);(在%d与%d之间加入了空格)
输入:d e f,输出:def
在这里我们就需要注意当为字符型时要注意你空格的输出,但是当你是数字时就不需要考虑了。(这是因为空格也属于字符)
3. 但是在scanf中如果格式控制符串中有非格式字符时也要输入非格式字符
出现了错误现象
这样就对了