【C语言】的%*d、%.*s等详解:

您所在的位置:网站首页 dy中d是什么意思 【C语言】的%*d、%.*s等详解:

【C语言】的%*d、%.*s等详解:

2023-12-21 09:50| 来源: 网络整理| 查看: 265

目录: 0.前言【精简版】:时间少的看这里: 1.【绅士淑女止步!!!!】0.必备入门小知识:1.正题1:scanf(1) %*d 被枪毙了:(2) 【%.*d 】的队友被枪毙了: 2.正题2:printf就不讲了,前面的【前言】似乎讲得很明白了吧。

0.前言【精简版】:

其实网上也有很多关于这方面的解释,但是总会让新手甚至小老手有些迷茫,比如网上有一种解释就说:忽略…… 你忽略啥啊你…

时间少的看这里:

%\*和\*.*的形式,一般只有整数%和字符串%s的情况下才比较有用,但是为了方便大家理解,这里我列出全部的基础情况:

请注意:scanf和printf中的情况是不一样的!

scanf: 注意:在scanf里只有%*d和%.*d有意义, 其他的%*f,%*lf,%*c和%*s等等都是没有意义的,编译器会报错。所以千万别乱写。

(1) %*d(仅它有意义:忽略掉它本身,并重新匹配:)

int a=0,b=0,c=0; scanf("%*d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); 输入:12 34 56 输出:a=34,b=56,c=0 相当于:忽略掉第一个输入12(它本身), 并将a与第二个数匹配,b与第三个数, 所以c没有匹配的输入,故c还是原来的值0.

下面的2种情况给你参考:

/****************************************/ scanf("%d%*d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); 输入:12 34 56 输出:a=12,b=56,c=0 相当于:忽略掉第二个输入34(它本身) scanf("%d%d%*d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); 输入:12 34 56 输出:a=12,b=34,c=0 相当于:忽略掉第三个输入56(它本身)

(2) %.*d(仅它有意义:忽略%*d的下一个输入,并重新匹配)

scanf("%.*d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); 输入:12 34 56 输出:a=12,b=56,c=0 相当于:忽略掉第二个输入34(它的下一个) 所以a和第一个输入匹配,b和第三个输入匹配, 中间那个输入被忽略了,所以c也就没有匹配上。

下面的2种情况给你参考:

/****************************************/ scanf("%d%.*d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); 输入:12 34 56 输出:a=12,b=34,c=0 相当于:忽略掉第三个输入56(它的下一个) scanf("%d%d%.*d",&a,&b,&c); printf("a=%d,b=%d,c=%d",a,b,c); 输入:12 34 56 输出:a=12,b=34,c=56 相当于:忽略掉第四个输入(它的下一个:空气) 所以最后这种没有意义!和没有加.*一样。

printf: 注意:在printf里没有限制,%c,%d,%s,%f,%lf都可以加*或.*,都有意义。 但是,他们的意义却不相同:

(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(意义:肯定会输出全部,根据实际补空格) 注意,%f默认小数点后面6位数:小数点也算一位!

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(意义:指定小数点后面几位,跟%.nf是一样的)

你懂的

(5)%*s(意义:也是根据实际情况在前面加空格)

char *a="123456"; printf("a=%*s",5,a); 输出:a=123456;因为5


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3