Почему мой код не печатает отсортированный массив? - PullRequest
0 голосов
/ 06 октября 2018

Почему код ничего не печатает?то, что этот код должен делать, это сортировать массив 2d таким образом: массив 2d представляет собой {x, y}, затем код должен его отсортировать, строки, содержащие x <0, должны быть первыми, а строки сх> = 0 должно быть следующим.функция подкачки здесь заключается в переключении между двумя строками.теперь, когда я пытаюсь распечатать отсортированный массив, я ничего не получаю в выводе

#include <stdio.h>
void swap(int p1[], int p2[]);
int arrange(int p[][2], int n);


void swap(int p1[], int p2[]){
  for(int i=0; i<2; i++){
    int temp=p1[i];
    p1[i]=p2[i];
    p2[i]=temp;
  }
}

int arrange(int p[][2], int n){
  int idx=0;
  for(int i=0; i<n; i++){
    if(p[i][0] >= 0 && (i+1)<n)
        if(p[i+1][0] <0) {
            swap(&p[i][0],&p[i+1][0]);
            idx++;
        }
    else if(p[i][0]<0)
        idx++;
  }
return 1;
}

int main()
{
  int a[4][2]={{1,2},{6,7},{-10,5},{0,1}};
  arrange(a[4][2], 4);
  for(int i=0; i<4; i++){
        printf("{%d, %d}, ", a[i][0], a[i][1] );
  }

}

1 Ответ

0 голосов
/ 06 октября 2018

Почему код ничего не печатает?

Поскольку он не компилируется, так как ваш компилятор должен выдавать ошибки и предупреждения.

Для того, чтобыисправьте ошибки, измените это:

arrange(a[4][2], 4);

на это:

arrange(a, 4);

Приложение:

Вот то, что предупреждение GCC с флагом Wall переданомне дали:

prog.cc: In function 'int arrange(int (*)[2], int)':
prog.cc:17:7: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
17 |     if(p[i][0] >= 0 && (i+1)<n)
   |

Чтобы исправить это предупреждение, я изменил ваш код на:

if(p[i][0] >= 0 && (i+1)<n) {
    if(p[i+1][0] <0) {
        swap(&p[i][0],&p[i+1][0]);
        idx++;
    }
} else if(p[i][0]<0) {
    idx++;
}
...