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

如题所述

因为第二个%*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的结果是一样的

温馨提示:答案为网友推荐,仅供参考