首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

重新请问一个有关问题

2012-03-24 
重新请教一个问题!要完成这个,我在网上收了一个代码,在visual Studio 2010中运行成功了:#includestdio.h

重新请教一个问题!

要完成这个,我在网上收了一个代码,在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个空格。

热点排行