在C中,我想连续打印4个十进制数,然后打印下一个4

时间:2016-08-28 03:43:59

标签: c printf

#include "stdio.h"

int main() {
    int max = 1000;
    for (int i = 0; i < max; ++i) {
        printf("%d", i);
    }
    return 0;
}

如果max1000,则会以下面显示的格式打印

0123 up to 1000

但我想在每行打印4个值,如下所示:

0123   
4567
...

我希望看到的数字不仅仅是数字。对于单个数字的数字,它应该是这样的:0123对于两位数字,它应该是这样的:11121314对于三位数字,它应该是这样的:111112113114最高996997998999最多1000

3 个答案:

答案 0 :(得分:2)

要让您的循环打印到1000的{​​{1}},您必须使用max.size = 1000运算符。

这是一个修改后的版本,它将格式化输出,每行最多4个字符:

<=

它将打印:

#include <stdio.h>
#include <limits.h>

int main(void) {
    struct { int size; } max = { 1000 };

    if (max.size >= 0) {
        for (int col = 0, i = 0;; i++) {
            char buf[2 + sizeof(int) * CHAR_BIT / 3];
            int n = snprintf(buf, sizeof buf, "%d", i);
            for (int j = 0; j < n; j++) {
                putchar(buf[j]);
                if (++col == 4) {
                   putchar('\n');
                   col = 0;
                }
            }
            if (i == max.size) {
                if (col > 0) {
                    putchar('\n');
                }
                break;
            }
        }
    }
    return 0;
}

修改

根据您更新的问题,它实际上要简单得多:使用模运算符0123 4567 8910 1112 1718 ... 6997 9989 9910 00 在每第4个数字后打印一个换行符。

%

答案 1 :(得分:0)

只需检查> = &gt;是否可被4整除。每当它被4整除时,打印换行符。

<span id="CurrentPassword-error">The following values are not allowed (&lt;!--)--&gt;</span>

答案 2 :(得分:0)

您也可以在不使用缓冲区的情况下执行此操作:

#include <stdio.h>

void print_digit(int number);

int main(void) {
    putchar('0');
    int i;
    for(i = 1; i <= 1000; i++) {
        print_digit(i);
    }
}

void print_digit(int number) {
    static int digit_count = 1; // a zero is already printed
    int i;
    for(i = 1; i <= number; i *= 10);
    for(i /= 10; i; i /= 10) {
        putchar('0' + number % (i * 10) / i);
        digit_count++;
        if(digit_count == 4) {
            digit_count = 0;
            putchar('\n');
        }
    }
}

但是,我不得不承认这段代码与优雅无关,因为我不知道如何使print_digit与零一致。