我正在读一本关于C的书,它要求我做的问题是:
编写一个程序,使用printf在屏幕上显示以下图片
然后它是带星号的复选标记。因此,首先想到的是编写一堆使用格式宽度说明符的printf()语句。所以我出来了:
int main() {
printf("This program prints a checkmark using asteriks\n");
char asterik = '*';
printf("%10c\n", asterik);
printf("%9c\n", asterik);
printf("%8c\n", asterik);
printf("%7c\n", asterik);
printf("%6c\n", asterik);
printf("%c %3c\n", asterik, asterik);
printf("%2c %c\n", asterik, asterik);
printf("%3c\n", asterik);
return 0;
}
我知道这段代码很可怕,令人厌恶所有9码,但我真的想知道是否有更高效和更清洁的方式?我不确定作者是否打算这样写,考虑到第2章中提到的这一课,我们刚刚介绍了一些非常基本的东西,没有与此有关。 (我只记得如何通过K& R来调整宽度)
答案 0 :(得分:4)
只有一个字符串文字可能更好,如:
const char checkmark[] =
" *\n"
" * \n"
" * \n"
"* * \n"
" * * \n"
" * \n"
;
printf("%s", checkmark);
答案 1 :(得分:0)
我不知道数组和循环是否已经被覆盖,但是如果他们那么你可以将它翻译成格式数组(例如char *formats[] = { "%10c\n", "%9c\n", ... }
),然后循环这些格式并打印星号:
for (int i = 0; i < num_of_formats; i++)
{
printf(formats[i], asterisk);
}
请注意,在这种情况下,您必须将带有两个星号的行视为具有两种格式。即而不是使用"%c %3c\n"
,您将定义以下两种格式"%c "
和"%3c\n"