C 语言中输入格式 scanf(“%2d%*2s%2d“,&a,&b)是什么意思 您所在的位置:网站首页 scanf输入加逗号 C 语言中输入格式 scanf(“%2d%*2s%2d“,&a,&b)是什么意思

C 语言中输入格式 scanf(“%2d%*2s%2d“,&a,&b)是什么意思

2023-11-03 11:13| 来源: 网络整理| 查看: 265

直接说明

代码

 #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 实验室设备网 版权所有