更有效的方法来写这个?

时间:2015-04-08 21:53:03

标签: c

我正在读一本关于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来调整宽度)

2 个答案:

答案 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"