C 语言中输入格式 scanf(“%2d%*2s%2d“,&a,&b)是什么意思 | 您所在的位置:网站首页 › scanf输入加逗号 › C 语言中输入格式 scanf(“%2d%*2s%2d“,&a,&b)是什么意思 |
直接说明
代码 #include int main() { int a,b; scanf("%2d%*2s%2d",&a,&b); printf("%d,%d\n",a,b); } 测试1 输入:123456 输出:12,56 测试2 12345678 输出:12,56 问题:%*2s是什么输入格式,有什么作用 答案:表示的是忽略对应输入的这部分数,那么到底忽略那部分数呢?以下是详细分析详解:假如输入值为123456,那么根据根据输入函数的格式scanf("%2d%*2s%2d"),%2d就是取123456中的第一和第二位数,取走之后,就只剩下3456;%*2s表示忽略我所对应的这部分数,就是把3456的第一位和第二位字符不要,那么就只剩下56了,最后56就放在b地址里面了。 作用:可以用作在输入格式中,不限定输入的形式。 取个例子,要求上面代码输出格式为1,2,34.请设计输入scanf函数的输入形式,能满足以下几种输入形式: 第一种输入方式:1,2,34(以逗号做分隔符); 第二种输入方式:1 2 34 (以空格做分隔符); 第三种输入方式:1 2 34(以tab键做分隔符) 第四种输入方式:1 2 34 (以回车符做分隔符) 那么可以将输入格式设计为这样:scanf("%c%*c%c%*c%c",&a,&b,&c) 等于说是,无论你输入其它什么形式的分隔符,都可以用%*c将其吞掉,而不受影响,同时又起了兼容各种分隔形式符的作用。 下面我们再进行拓展一下,%*d、%.*d、%*f、%*lf、%*c、%*s。大家一看这么多,是不是头一下就大了啊,别着急,只要有耐性看下去,你就能完全理解啦。 注意:%*d、%.*d、%*f、%*lf、%*c、%*s在输入函数scanf个输出函数printf里面作用是不同的 下面我们将上面这些输入格式在scanf和printf里面分别讨论 一、scanf函数格式 1.%*d格式具体例子 #include int main() { int a=0,b=0,c=0; scanf("%*d%d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); } 测试1: 输入 12 34 56 输出 34,56,0 //忽略输入的第一个值12,因此等于说输入值为 34和56,在对这两个数与a,b,c一一匹配,a匹配的是34,b匹配的是56,c没有匹配值,就是原值0. 测试2: 输入 77 88 99 输出 88,99,0 //同上原理%*d作用:忽略输入所对应的整数值,或者说直接将其所对应的值删除。 例子说明:忽略输入的第一个值12,因此等于说输入值为 34和56,在对这两个数与a,b,c一一匹配,a匹配的是34,b匹配的是56,c没有匹配值,就是原值0。 2.%.*d格式具体例子 #include int main() { int a=0,b=0,c=0; scanf("%d%.*d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); } 测试1 输入 12 34 56 输出 12,0,0 #include int main() { int a=0,b=0,c=0; scanf("%.*d%d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); } 测试2: 输入 12 34 56 输出 0,0,0%.*d作用:忽略其所对应的值及其之后的所有值 例子说明:在上面第一个代码中,我们将%.*d放在输入函数格式中间,发现只能输出第一个值,第二个和第三个都无法输出。在第二个代码中,将%.*d放在输入函数前面,发现都无法输入值,因此可以判断%.*d的作用就是将其对应值及之后的值都删除掉。 3.%*f、%*lf、%*c、%*s它们的作用都等同于%*d,只不过数据格式不同,适用于浮点数,字符和字符串,就不一一说明了 二、printf函数格式 1.%*d 根据实际情况在前面补空格 int a=123; printf("a=%*d",2,a); 输出:a=123 (输出全部123,长度>2,不需要补空格) 跟没指定一样! printf("a=%*d",10,a); 输出:a=空格空格空格空格空格空格空格123 (往前补7个空格,补够总共10个位) 2.%.*d 根据实际情况在前面补0 printf("a=%.*d",2,a); 输出:a=123 (输出全部123,长度>2,不需要补0) 跟没指定一样! printf("a=%.*d",10,a); 输出:a=0000000123 (往前补7个0,补够总共10个位) 很显然这种情况意义不大,因为我们很少需要补0. 所以基本不用这种写法。 3.%*f 根据实际情况在后面补0 float a=12; printf("a=%*f",3,a); 输出:a=123.000000 默认小数点后面6位。而且肯定会输出全部, 所以10位>指定的3位,跟没指定一样! printf("a=%*f",13,a); 输出:a=空格空格空格123.000000 默认小数点后面6位。而且肯定会输出全部10位, 剩下3位,所以在前面填3个空格(小数点也算一位) 4.%.*f 指定小数点后几位 5. %*s 根据实际情况在前面家空格 char *a="123456"; printf("a=%*s",5,a); 输出:a=123456;因为5 |
CopyRight 2018-2019 实验室设备网 版权所有 |