繁体   English   中英

在C中每行麻烦打印5个双数组元素

[英]Trouble printing 5 elements of a double array per line in C

我一直在为学校分配作业,基本上是创建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个元素。 任何帮助是极大的赞赏!

您需要按以下方式更新\\n条件-

if ((i+1) % 5 == 0)
    {
        printf ("\n");
    }

i % 5将在索引5,10,15..之后引起换行。 在这种情况下,索引5处有6,索引10处有4,9,14..而是需要在4,9,14..4,9,14.. 这些都被(i+1)覆盖。

只需为您的条件手动编写评估:

if (i % 5 == 0 && i > 0)

i  result
0  false
1  false
2  false
3  false
4  false
5  true
6  false

现在我们可以看到它是错误的5次,然后是true,这使它打印换行符,但是仅在您打印完数字之后!

因此,您需要稍微重新排列逻辑,但条件是正确的。

该点位于if语句的&& i > 0部分中。 如果将其删除,则将是输出:

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永远不会为零。

只需在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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM