scanf("%2d %*3d %2d",&a,&b);输入12 34 67答案为什么是12,67

 我来答
绝杀狂龙
2018-11-25 · TA获得超过1913个赞
知道小有建树答主
回答量:1310
采纳率:78%
帮助的人:585万
展开全部
因为第二个%*3d ,里面的*号修饰符起的作用,就是跳过对应的输入值
可以查看书中关于scanf() 星号修饰符的作用
追问
我就是不明白在12后面要跳3为整数,怎么直接到67了
空格也算?在12和67之间是 空格 34 空格 67的?
追答
首先你需要再重新复习下scanf()函数
这里先给你拆开说明,不然你也是不理解
下列代码是去掉%2d %*3d %2d 里面数字2 3 2的代码
#include
int main(void)
{
int a,b;
scanf("%d %*d %d",&a,&b);
printf("%d,%d",a,b);
return 0;
}
因为你输入的是12[空格]34[空格]67
针对上述代码,scanf()函数读取过程就是
读取一个十进制整数,所以就开始读取,读到12以后碰到空白字符(空白字符包括换行符、制表符、空格)此时就知道读完了一个,然后将12的数值赋给变量a
第二次读取是从非空白字符读取,也就是34,但是因为遇到了%*d ,所以直接跳过不进行赋值
第三次读取到67,然后赋值给变量b
这上面如果能看明白就接着看下面的
这里讨论的是你的代码:
#include
int main(void)
{
int a,b;
scanf("%2d %*3d %2d",&a,&b);
printf("%d,%d",a,b);
return 0;

}
如果scanf函数里添加了%2d等这些,就涉及到字符宽度的问题
例如你输入123 34 67
此时因为%2d的缘故,
如果使用字段宽度:scanf()函数会在字段结尾或者第一个空白字符处停止读取(两个条件满足其中一个就停止)
这里的%2d是就是读取字符宽度为2的整数,上面的123是字符宽度为3的整数
受限于字符宽度, 123的数值只能给将12赋值给变量a
然后数字3就剩下来了。所以输入123 34 67的结果和
输入12 3 34的结果是一样的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式