不至于吧?感觉很自然的事情啊!-----晚上来写注释吧!
http://blog./csynyk
#include <stdio.h> #include <string.h> int main() { char i=1, number=0; char *str=" "; //35个空格符 char *p="* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "; //35个'*' printf("Please a value ( 1<value<35 ):"); scanf("%d",&number); str+=strlen(str)-number; //这句的目的是根据输入的数据调整调整str的起始位置,譬如number=6,则strlen(str)-number=35-6=29; //str+=29,就是将字符串的起始位置往后移29个字符宽度。 while(i<number+1) { printf("%s",str+i); //根据行数的不同自动调整字符串的起始位置。还以6为例,上面已经调整到第29字符了,如果i=1,则字符串就 //从第30个开始打印,实际上就只打印了30~35共6个空格。 printf("%s\n",p+(strlen(p)-i*2)); //这一句得原理和上面的相同,i*2是因为p指向的字符串中每两个字符位置中才有一个'*' i++; } printf("\n"); return 0; }