2016-02-22 2 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

Почему u использует% c для (i% 5) –

+0

Это печатает '' \ n'' перед первым «x x x x x» и не имеет '' \ n'' после последнего '' x x x x x ''. – 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'); 
} 
Смежные вопросы