如果老板会编译程序的话,发下面这段代码给他:
#include <stdio.h>
int main() {
int a,b,c;
for (c=0,b=0;a="BCCB{BC@BDBBCEFCCBDECFDDBBCBBBC@BBABABBBCBDBBBBBBBCBBBCBBBBACBABCBC@BBBDBBCBDBBBBBBBCBBBCBBBAAECI@BBCCCEEBBBBBCECBCBCDDBEBC@}BK@"[b++];)
for(; a-- > 64 ; )
putchar ( ++c==74 ? c=0,10 : b&1?32:36);
return 0;
}
执行结果:
怎么样?主意不错吧?祝你成功!
上面程序的数字74是换行符所在的位置,其它数字找一个ASCII码表对照着看就明白了。弄懂之后,就可以随心所欲地实现其它显示效果了,关键是上面的字符串是怎样产生的呢?请看下面的程序,注释足够清晰了,不解释:
#include <stdio.h>
int main() {
char signature[6][128];
strcpy(signature[0], "$$ $$$ $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$");
strcpy(signature[1], "$$ $$ $$$ $$$$$$ $$$ $$$$ $$$ $$$$ $$ $$$ $$ $$");
strcpy(signature[2], "$$ $ $ $$ $$$ $$$$ $$ $$ $$ $$$ $$ $$$ $$ $$ $$$ $ $$$ $$");
strcpy(signature[3], "$$ $$ $$ $$$ $$$$ $$ $$ $$ $$$ $$ $$$ $$ $ $$$$$ $$$$$$$$");
strcpy(signature[4], "$$ $$$ $$$ $$$$$ $$ $$ $$$ $$$ $$$ $$$ $$$$ $$$$$ $$");
strcpy(signature[5], "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$");
char output[256];
memset(output, 0, sizeof(output));
int i, j = 0;
for (i = 0; i < 6; i++) {
char *p = signature[i];
while ( p ) {
char *p1 = strchr(p, ' ');
if ( p1 ) {
output[j++] = p1 - p + 64;
// assume every line ends with $, p always not null
p = strchr(p1, '$');
output[j++] = p - p1 + 64;
}
else {
// +1 for the newline character will "eat" one character
output[j++] = strlen(p) + 64 + 1;
output[j++] = 64;
// end of current line, switch to next line
p = NULL;
}
}
}
printf("%s\n", output);
return 0;
}
受ASCII码取值范围的限制,这种小伎俩不适宜显示太复杂的效果