重新请教一个问题!
要完成这个,我在网上收了一个代码,在visual Studio 2010中运行成功了:
#include<stdio.h>
void main()
{
int n,i;
printf("输入第一行星号个数:\n");
scanf("%d",&n);
for(i=0;i<=n;i++)
printf("*");
printf("\n*%*cC Lanuage Program Design%*c*\n",(n-24)/2-1,' ',n-(n-24)/2-25,' ');
for(i=0;i<=n;i++)
printf("*");
}
只是不太清楚第三个printf函数的意义,谁能解释一下?
[解决办法]
printf("%c", 'a'); 输出一个 a
printf("%3c", 'a'); 输出占 3 个位置, 即 两个空格加一个 a
printf("%*c", x, 'a'); 输出占 x 个位置, 即 x-1 个空格加一个 a
[解决办法]
问题应该主要在%*c吧
相信你知啊%d代表整形,%c代表字符型
所以%*c就是重复*个字符,后面的(n-24)/2-1,' '之处的就是字符的个数和字符值(在此为空格)
其中的24是中间输出的字符串的长度,这样就可以把字符串两边设定相等的空格数(字符串居中)
应该可以理解了吧?
[解决办法]
"\n*%*cC Lanuage Program Design%*c*\n", (n-24)/2-1, ' ', n -(n-24)/2-25, ' '
把""之间的格式化字符串分割一下:
\n
*
%*c
C Lanuage Program Design
%*c
*
\n
两个“\n”是换行的,
两个单个的“*”就是分别输出一个“*”号,也就是图形中第2行开始和末尾两个“*”号。
“C Lanuage Program Design”,这没什么说的。
关键是两个“%*c”,正如3楼介绍的:
printf("%*c", x, 'a'); 输出占 x 个位置, 即 x-1 个空格加一个a
所以对于第1个“%*c”,相当于printf("%*c", (n-24)/2-1, ' ');,也就是输出(n-24)/2个空格。
对于第2个“%*c”,相当于printf("%*c", n -(n-24)/2-25, ' ');,也就是输出n -(n-24)/2-24个空格。