2016-02-22 33 views
0

我有一個問題,安排25個數字5 5順序。這是我到目前爲止:顯示25個數字排列5乘5順序

int main() { 
    int num,arr[100]; 
    int i, y, swap; 

    num = 25; 

    printf("Enter %d integers \n",num); 

    for(i = 0; i < 25; i++) { 
     printf("\nElement %d: ", i + 1); 
     scanf("%d", &arr[i]); 
    } 

    for(i = 0; i < (num - 1); i++) { 
     for(y = 0 ; y < num - i - 1; y++) { 
      if(arr[y] > arr[y+1]) { 
       swap  = arr[y]; 
       arr[y] = arr[y+1]; 
       arr[y+1] = swap; 
      } 
     } 
    } 

    printf("Sorted list in ascending order:\n"); 
    for (i = 0 ; i < num ; i++) 
     printf("%d \t", arr[i]); 

    getch(); 
} 

我期待我的輸出將是這樣的。

Sorted list in ascending order: 
x x x x x 
x x x x x 
x x x x x 
x x x x x 
x x x x x 
+1

這是什麼不工作?你的輸出是什麼?你有沒有調試過,看看它出錯了? – Tavo

回答

3

像這樣:

... 
    printf("Sorted list in ascending order:\n"); 
    for (i = 0 ; i < 5; i++) { 
     printf("%c%d", (i % 5) ? '\t' : '\n', arr[i]); 
    } 
    printf("\n"); 
... 

或者,在 「chux」 前無需換行:

... 
    printf("Sorted list in ascending order:\n"); 
    for (i = 0 ; i < num ; i++) { 
     printf("%d%c", arr[i], ((i % 5) != (5-1)) ? '\t' : '\n'); 
    } 
... 

而且,如果你想要很好地對齊列,添加一個合適的寬度到%d

printf("%10d ... ");    /* right aligned */ 

printf("%-10d ... ");    /* left aligned */ 
+0

爲什麼你使用%c作爲(i%5) –

+0

這會在第一個「x x x x x」之前打印一個''n'',並且在最後一個'「x x x x x」後面缺少''n''。 – chux

+0

@COL'(i%5)'是更大表達式'(i%5)的一部分嗎? '\ t':'\ n''這會導致製表符或換行符取決於'(i%5)'的真實性' –

0

只是一個修飾:

printf("Sorted list in ascending order:\n"); 
for (i = 0 ; i < num ; i++) 
{ 
    printf("%d \t", arr[i]); 
    if(i % 5 == 0) putchar('\n'); 
} 
+0

你只要加上if(i %% 5 == 0)putchar('\ n'); ?它是如何工作的 –

+0

它的工作原理是這樣的 - 「每5個數字(如果我可以被5除盡,其餘爲0),把一個換行字符做成一行。」 – Shark

+2

這不起作用,並說明了爲什麼使用花括號是很好的做法.... –

0

避免打印的最後一個號碼後,額外的空間標籤。

要獲得視覺上排列的值,請使用打印寬度。

int print_width = 4; 
int columns = 5; 
for (i = 0 ; i < num ; i++) { 
    printf("%*d", print_width, arr[i]); 
    putchar(i%columns == columns-1 ? '\n' : '\t'); 
}