printf %*s

wzyzb 2010-05-27 11:17:59

printf("%*s%s", /*这里的参数应该是几个?*/);
...全文
1669 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
cinderellaxw 2012-07-04
  • 打赏
  • 举报
回复
学无止境啊。。。擦。。
maple_zhj 2010-06-02
  • 打赏
  • 举报
回复
* 表示读取,但不进行保存。也就是说,跳过。
heimaofj 2010-06-02
  • 打赏
  • 举报
回复
学无止境
赵4老师 2010-06-01
  • 打赏
  • 举报
回复
关键要区别scanf和printf里面的%*不是一个意思啊!
wzyzb 2010-06-01
  • 打赏
  • 举报
回复
第三方司法所
zhangyafei13 2010-05-29
  • 打赏
  • 举报
回复
仁兄们都是怎么学英语的啊,。。
ytu2006123 2010-05-28
  • 打赏
  • 举报
回复
MSDN2008
If the width specification is an asterisk (*), an int argument from the argument list supplies the value


我好容易从MSDN中找到这个解释,仔细一看帖子,原来已经有人贴上了。白费劲了
cao_julians 2010-05-28
  • 打赏
  • 举报
回复
22楼、27楼二位:抱歉了,那天匆忙,代码有误

printf("%-10.*s\n",k+1,"**********");/*-号左对齐,10.*起宽度控制,*放在小数点后*/

再给段新代码:
int k,n=10;
for(k=1;k<n;k++)
printf("%*.*s\n",k<n/2?k+n:2*n-k,k<n/2?2*k-1:2*(n-k)-1,"*******************");
输出的比上边的图案更复杂些,试试看。

cao_julians 2010-05-28
  • 打赏
  • 举报
回复
22楼、22楼二位:抱歉了,那天匆忙,代码有误

printf("%-10.*s\n",k+1,"**********");/*-号左对齐,10.*起宽度控制,*放在小数点后*/
vanchristin 2010-05-28
  • 打赏
  • 举报
回复
楼上不用\n的吗
bobo364 2010-05-28
  • 打赏
  • 举报
回复
更本写不出三角形,结果如下

*******************************************************Press any key to continue
. . .

#include<stdio.h>

int main()
{
int n=5,k;
for(k=0;k<n;k++)
{
printf("%*s",k+1,"***********");
}
system("pause");
return 0;
}


ytu2006123 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhzxlc_06 的回复:]
最小域宽和精度限定符可以通过变元而不是常数提供给printf(),为了实现这一点,我们用*作为占位符。当编译器扫描到格式串时,printf()将*与变元串中的参数按顺序匹配!

C/C++ code
#include <stdio.h>

int main(void)
{
printf("%*.*f",10,4,1234.34); // 第一个*与10匹配,第二个*与4匹配。……
[/Quote]
up
ytu2006123 2010-05-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 cao_julians 的回复:]
%*S
对应两个输出参数:一个宽度,一个字符串
大家可能都练过这个图案的打印:
*
**
***
****
*****
******
。。。
用%*S格式可能用一层循环实现之
for(k=0;k<n;k++)
printf("%*s",k+1,"***********");
[/Quote]
这样不行。
当第二个参数(s)的宽度大于第一个参数时,第一个参数似乎不起作用。
按照for(k=0;k<n;k++)
printf("%*s",k+1,"***********");
打印结果为:(n=4)
***********
***********
***********
***********
gundamy 2010-05-28
  • 打赏
  • 举报
回复
学习了
东莞某某某 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuliangyue7 的回复:]

这个是ansi标准里面的吗
前两天才用 结果因为不确定是不是标准 又给换了
printf( "%*s", len, str );
输入长度为len的字符串 不足补空格
[/Quote]

C89吧
qyq_zhangyao 2010-05-27
  • 打赏
  • 举报
回复
学习了
chaoliu1024 2010-05-27
  • 打赏
  • 举报
回复
最小域宽和精度限定符可以通过变元而不是常数提供给printf(),为了实现这一点,我们用*作为占位符。当编译器扫描到格式串时,printf()将*与变元串中的参数按顺序匹配
#include <stdio.h>

int main(void)
{
printf("%*.*f",10,4,1234.34); // 第一个*与10匹配,第二个*与4匹配。打印结果:1234.3400

return 0;
}
hewanli0420 2010-05-27
  • 打赏
  • 举报
回复
学习了!!!原来还可以这么用……很方便!!!自己试了试
wuliangyue7 2010-05-27
  • 打赏
  • 举报
回复
这个是ansi标准里面的吗
前两天才用 结果因为不确定是不是标准 又给换了
printf( "%*s", len, str );
输入长度为len的字符串 不足补空格
lylm 2010-05-27
  • 打赏
  • 举报
回复
是3个参数,%*s需要2个参数,其他跟普通一样
加载更多回复(18)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧