[英]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.