*可以作为printf函数第一个参数中的占位符 例如 printf("%*.*f\n", 10, 4, 1234.56); //不输出10和4而输出1234.5600,它在输出字符串时也适用。 例如

for(int i=0;i<8;i++)
  printf("%.8s\n","-------Q-------"+i);

输出

-------Q
------Q-
-----Q--
----Q---
---Q----
--Q-----
-Q------
Q-------

现假设我们把各行王后的棋子位置存入一个数组,就可以输出图形了。

#include <iostream>
#include <cmath>

void printq(int s[],int n)
{
 for(int x=0;x<n;x++)
  printf("%.*s\n",n,"---------Q---------"+(10-n)+(int)round(log(s[x])/log(2)));
}
int main()
{
 int s[10]={1,4,16,64,2,8,32}; //log(2,n)代表位置
 printq(s,7);

 int s1[10]= {2,8,32,1,4,16};
 printq(s1,6);
 return 0;
}

输出

------Q
----Q--
--Q----
Q------
-----Q-
---Q---
-Q-----

----Q-
--Q---
Q-----
-----Q
---Q--
-Q----