#include "stdio.h"
int main() {
int max = 1000;
for (int i = 0; i < max; ++i) {
printf("%d", i);
}
return 0;
}
如果max
为1000
,则会以下面显示的格式打印
0123 up to 1000
但我想在每行打印4个值,如下所示:
0123
4567
...
我希望看到的数字不仅仅是数字。对于单个数字的数字,它应该是这样的:0123
对于两位数字,它应该是这样的:11121314
对于三位数字,它应该是这样的:111112113114
最高996997998999
最多1000
。
答案 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)
只需检查> = >
是否可被4整除。每当它被4整除时,打印换行符。
<span id="CurrentPassword-error">The following values are not allowed (<!--)--></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
与零一致。