簡體   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