C 随机整数生成器问题(A book on C 4th Edition)
C random integer generator question (A book on C 4th Edition)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, n;
printf("\n%s\n%s",
"Some randomly distributed integers will be printed.",
"How many do yo want to see? ";
scanf("%d", &n);
for (i = 0; i < n; ++i) {
if (i % 10 == 0)
putchar('\n');
printf("%7d", rand());
}
printf("\n\n");
return 0;
}
这是教科书中的代码"A book on C"。
当您在提示时键入 23 时,它应该会生成 3 行 8 列 (3*8-1) 中的 23 个随机数。
我了解到printf("%7d", rand())
应该return一个以十进制整数格式打印的值,打印整数的字段宽度为7。
但是,我得到的随机数宽度超过 7,而且看起来一点也不整齐。 (没有列也没有行,只有一大块连续的数字,比如 1235289043528935294835698246182965982)
我认为它与表达式 printf("%7d", rand())
函数以及它应该如何 return 值的方式有关。
我开始觉得教科书是错的
您没有打印任何空格。尝试插入一些:
printf("%7d\t", rand());
除了上面的评论,如果我理解正确你想要所有 8 个数字,那么该行应该更改为:if (i % 8 == 0);
您的号码大于 7 位数。你可以试试:
A) 将宽度字段更改得更高:
printf("%14d", rand() );
或
B) 使生成的数字小于7位:
printf("%7d", rand() % 1000 );
可以找到有关格式说明符的更多信息here
希望对您有所帮助!
与其猜测 rand()
数的最大宽度,不如计算最大随机数的宽度:RAND_MAX
.
snprintf(NULL, 0, ...
打印在缓冲区足够大的情况下将写入的字符数,不包括终止空字符。
int width = snprintf(NULL, 0, "%d", RAND_MAX);
稍后打印时,使用宽度。
printf(" %*d", width, rand());
如
#define COLUMN_N 8
for (i = 0; i < n; ++i) {
printf(" %*d", width, rand());
if (i % COLUMN_N == COLUMN_N - 1 || i + 1 == n) {
putchar('\n');
}
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, n;
printf("\n%s\n%s",
"Some randomly distributed integers will be printed.",
"How many do yo want to see? ";
scanf("%d", &n);
for (i = 0; i < n; ++i) {
if (i % 10 == 0)
putchar('\n');
printf("%7d", rand());
}
printf("\n\n");
return 0;
}
这是教科书中的代码"A book on C"。
当您在提示时键入 23 时,它应该会生成 3 行 8 列 (3*8-1) 中的 23 个随机数。
我了解到printf("%7d", rand())
应该return一个以十进制整数格式打印的值,打印整数的字段宽度为7。
但是,我得到的随机数宽度超过 7,而且看起来一点也不整齐。 (没有列也没有行,只有一大块连续的数字,比如 1235289043528935294835698246182965982)
我认为它与表达式 printf("%7d", rand())
函数以及它应该如何 return 值的方式有关。
我开始觉得教科书是错的
您没有打印任何空格。尝试插入一些:
printf("%7d\t", rand());
除了上面的评论,如果我理解正确你想要所有 8 个数字,那么该行应该更改为:if (i % 8 == 0);
您的号码大于 7 位数。你可以试试:
A) 将宽度字段更改得更高:
printf("%14d", rand() );
或
B) 使生成的数字小于7位:
printf("%7d", rand() % 1000 );
可以找到有关格式说明符的更多信息here
希望对您有所帮助!
与其猜测 rand()
数的最大宽度,不如计算最大随机数的宽度:RAND_MAX
.
snprintf(NULL, 0, ...
打印在缓冲区足够大的情况下将写入的字符数,不包括终止空字符。
int width = snprintf(NULL, 0, "%d", RAND_MAX);
稍后打印时,使用宽度。
printf(" %*d", width, rand());
如
#define COLUMN_N 8
for (i = 0; i < n; ++i) {
printf(" %*d", width, rand());
if (i % COLUMN_N == COLUMN_N - 1 || i + 1 == n) {
putchar('\n');
}
}