列中从1到100打印

时间:2016-09-03 02:53:55

标签: c

代码:

for(int i = 1; i <= 100; i++){
    if(i % 10 == 1)
        printf("\n%d", i);
    else printf("%4d",i);
}

结果:

(blank line)
1   2   3   4   5   6   7   8   9  10
11  12  13  14  15  16  17  18  19  20
21  22  23  24  25  26  27  28  29  30
31  32  33  34  35  36  37  38  39  40
41  42  43  44  45  46  47  48  49  50
51  52  53  54  55  56  57  58  59  60
61  62  63  64  65  66  67  68  69  70
71  72  73  74  75  76  77  78  79  80
81  82  83  84  85  86  87  88  89  90
91  92  93  94  95  96  97  98  99 100

如何在不执行以下操作的情况下删除第一个空白行:

for(int i = 1; i <= 100; i++){
    if(i == 1 || i % 10 == 1)
        printf("\n%d", i);
    else printf("%4d",i);
}

我怎么能'缩进'列?由于最后一列没有正确排列,我不知道如何使用printf来修复它。

最后,抱歉打算'(空行)',因为我不知道如何填空,并感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

而不是在一行开头打印换行符,而不是在最后打印:

for (int i = 1; i <= 100; i++){
    printf("%4d",i);
    if (i % 10 == 0)
        printf("\n");
}

这会在4个字符的字段中打印每个数字,如果最后一个数字可被10整除,则打印换行符。

输出:

   1   2   3   4   5   6   7   8   9  10
  11  12  13  14  15  16  17  18  19  20
  21  22  23  24  25  26  27  28  29  30
  31  32  33  34  35  36  37  38  39  40
  41  42  43  44  45  46  47  48  49  50
  51  52  53  54  55  56  57  58  59  60
  61  62  63  64  65  66  67  68  69  70
  71  72  73  74  75  76  77  78  79  80
  81  82  83  84  85  86  87  88  89  90
  91  92  93  94  95  96  97  98  99 100

答案 1 :(得分:1)

样式很奇怪,换行符不属于字符串文字的开头。 printf调用应打印该行,然后在必要时输出换行符:

"\nBad style"

"Good style\n"

要正确打印值,请更改逻辑。始终打印i的值,然后检查i是否可以被10整除,如果是,则打印换行符。

答案 2 :(得分:1)

for(int i = 1; i <= 100; i++)
    printf("%*d%c", (i % 10 == 1)? 0 : (i == 2) ? 4 : 3, i, (i % 10) ? ' ' : '\n');

答案 3 :(得分:-1)

我总是这样做:

#include <stdio.h>

int main (void) {

    for (int i = 0; i < 100; i++) {
        if (i && i % 10 == 0) putchar ('\n');
        printf ("%4d", i + 1);
    }
    putchar ('\n');

    return 0;
}

你也可以分开格式字符串来完成同样的事情:

char *fmt  = "%4d",
     *fmtn = "%4d\n";
for (int i = 0; i < 100; i++)
    printf ((i+1) % 10 == 0 ? fmtn : fmt, i + 1);
putchar ('\n');

注意:在这两种情况下,循环都是从0索引以适应索引数组)

示例使用/输出

$ ./bin/arraycols
   1   2   3   4   5   6   7   8   9  10
  11  12  13  14  15  16  17  18  19  20
  21  22  23  24  25  26  27  28  29  30
  31  32  33  34  35  36  37  38  39  40
  41  42  43  44  45  46  47  48  49  50
  51  52  53  54  55  56  57  58  59  60
  61  62  63  64  65  66  67  68  69  70
  71  72  73  74  75  76  77  78  79  80
  81  82  83  84  85  86  87  88  89  90
  91  92  93  94  95  96  97  98  99 100