如何在C中打印多行

时间:2014-03-23 12:08:04

标签: python c range tuples

我有一段Python代码,内容如下:

template = \
"""
                 %2s  %2s  %2s

                 %2s   R  %2s

                 %2s  %2s  %2s

    %2s  %2s  %2s   %2s  %2s  %2s   %2s  %2s  %2s    %2s  %2s  %2s

    %2s   B  %2s   %2s   W  %2s   %2s   G  %2s    %2s   Y  %2s

    %2s  %2s  %2s   %2s  %2s  %2s   %2s  %2s  %2s    %2s  %2s  %2s

                 %2s  %2s  %2s

                 %2s   O  %2s

                 %2s  %2s  %2s
    """

print template % tuple(range(1, 49))

我正在尝试将上面的代码转换为C(是的,我刚刚开始学习,这可能是非常不言而喻的)而且,对于我的生活,找不到任何可以帮助我的文档。

我已经尝试过使用Cython,但最终得到的是一些可笑的长代码,对我来说,在我的程序中实现起来并不实用。我也搜索了Stackoverflow很长一段时间,但无济于事。如果我错过了什么,请给我一个链接。

2 个答案:

答案 0 :(得分:1)

我想不出一种可移植的方式来生成参数列表,所以我想不出任何简单的解决方案比输入像printf这样的整个列表更好(模板,1,2,3,4,5,6, ......,49)。

另一个解决方案是手动浏览模板并执行以下操作:

#include <stdio.h>
#include <string.h>

void print_template_with_range(char *template, int start, int end) {
  int i = 1;
  char *str = strdup(template);
  char *cur = str;
  char *pos;
  while ((pos = strstr(cur, "%2s")) != NULL) {
    *pos = '\0';
    printf("%s", cur);
    printf("%2d", i++);
    cur = pos + 3;
  }
  printf("%s", cur);
  free(str);
}

int main() {
char* format_string = "\n\
             %2s  %2s  %2s\n\
\n\
             %2s   R  %2s\n\
\n\
             %2s  %2s  %2s\n\
\n\
%2s  %2s  %2s   %2s  %2s  %2s   %2s  %2s  %2s    %2s  %2s  %2s\n\
\n\
%2s   B  %2s   %2s   W  %2s   %2s   G  %2s    %2s   Y  %2s\n\
\n\
%2s  %2s  %2s   %2s  %2s  %2s   %2s  %2s  %2s    %2s  %2s  %2s\n\
\n\
             %2s  %2s  %2s\n\
\n\
             %2s   O  %2s\n\
\n\
             %2s  %2s  %2s\n\
    ";
print_template_with_range(format_string, 1, 49);
return 0;
}

产地:

              1   2   3

              4   R   5

              6   7   8

 9  10  11   12  13  14   15  16  17    18  19  20

21   B  22   23   W  24   25   G  26    27   Y  28

29  30  31   32  33  34   35  36  37    38  39  40

             41  42  43

             44   O  45

             46  47  48

答案 1 :(得分:0)

在Python中,你可以将一个集合抛出一个字符串,然后就会发生魔法。这是高级语言的乐趣。

C不是快乐或高级语言。

您将不得不使用要打印的数据创建一个数组,然后遍历printf和/或调用以发出所需的输出(逐行,char-by-char,或混合)。

做一些类似于你上面所做的事情:

char* format_string = " \
             %2s  %2s  %2s \
\
             %2s   R  %2s \
\
             %2s  %2s  %2s \
\
%2s  %2s  %2s   %2s  %2s  %2s   %2s  %2s  %2s    %2s  %2s  %2s \
\
%2s   B  %2s   %2s   W  %2s   %2s   G  %2s    %2s   Y  %2s \
\
%2s  %2s  %2s   %2s  %2s  %2s   %2s  %2s  %2s    %2s  %2s  %2s \
\
             %2s  %2s  %2s \
\
             %2s   O  %2s \
\
             %2s  %2s  %2s \
    ";

printf(format_string, t[0], t[1], ...);