我一直在为学校做作业,基本上我们正在创建2个随机双打阵列,然后使用3种不同的算法对它们进行排序并打印结果。输出需要每行打印5个元素。
我有这段代码:
//print sorted arrayB
for (i = 0; i < size; i++)
{
printf ("%.1lf ", arrayB[i]);
if (i % 5 == 0 && i > 0)
{
printf ("\n");
}
}
其中所有变量都是在排序之前定义的,每次输出都是这样的:
1.0 2.0 3.0 4.0 5.0 6.0
7.0 8.0 9.0 10.0 11.0
12.0 13.0 14.0 15.0 16.0
17.0 18.0 19.0 20.0 21.0
etc...
我不明白为什么它会在最上面的行中打印6个元素,而在其他所有元素中打印5个元素。非常感谢任何帮助!
答案 0 :(得分:0)
您需要更新\n
条件,如下所示 -
if ((i+1) % 5 == 0)
{
printf ("\n");
}
i % 5
会在索引5,10,15..
之后产生换行符。这是你的情况,你在索引5有6,在索引10有11。
相反,你需要在4,9,14..
处休息。这些都由(i+1)
覆盖。
答案 1 :(得分:0)
只需手动为您的条件编写评估:
if (i % 5 == 0 && i > 0)
i result
0 false
1 false
2 false
3 false
4 false
5 true
6 false
现在我们可以看到它是假的5次,然后是真的,这使得它打印换行符,但只有在你打印了这个号码之后!
所以你需要稍微重新排列你的逻辑,但条件是正确的。
答案 2 :(得分:0)
重点在于&& i > 0
语句的if
部分。如果你删除它,这将是输出:
1.0
2.0 3.0 4.0 5.0 6.0
7.0 8.0 9.0 10.0 11.0
12.0 13.0 14.0 15.0 16.0
17.0 18.0 19.0 20.0 21.0
etc...
通过排除零,您已阻止在第一个数字后打印换行符,请参阅?
解决方案是将i
索引移动一个,如下所示:
if ((i + 1) % 5 == 0)
{
printf ("\n");
}
现在你甚至不需要&& i > 0
部分,因为i + 1
永远不会为零。
答案 3 :(得分:0)
只需向i添加1(因此条件i> 0,变得不必要),这将解决。这是因为在你施加的条件下,对于第一次换行(\ n),它必须从0到5,为此你必须重复循环6次,所以在第一次换行时它显示6个数字,而不是5个
像这样:
#include <stdio.h>
#define SIZE 25
int main() {
int i, arrayB[SIZE] = {0};
for (i = 0; i < SIZE; i++)
{
printf ("%.1lf ", arrayB[i]);
if ((i+1) % 5 == 0)
{
printf ("\n");
}
}
return 0;
}