2017-01-10 2 views
-1

Эта программа сортирует строку внутри массивов.Функция сортировки перестает работать без ошибок - C

Функция сортировки останавливая после 3-й раз он работает без компиляции ошибок

int main(){ 
    char * arrP1[] = { "father", "mother", NULL }; 
    char * arrP2[] = { "sister", "brother", "grandfather", NULL }; 
    char * arrP3[] = { "grandmother", NULL }; 
    char * arrP4[] = { "uncle", "aunt", NULL }; 
    char ** arrPP[] = { arrP1, arrP2, arrP3, arrP4 , NULL }; 

    printAllStrings(arrPP); 

    sort(arrPP); 
    printAllStrings(arrPP); 


    return 0; 
} 

void sort(char ** arrPP[]) { 
int i, j, n, pi, pj; 
int t; 
char * temp; 

for (n = 0; n < 8; n++) { 
    pi = 0; 
    pj = 0; 
    printf("round %d\n", n); 

    for (i = 0; i < (sizeof(arrPP)); i++) { 
     for (j = 0; arrPP[i][j] != NULL; j++) { 
      t = 0; 
      if (i == 0 && j == 0) 
       continue; 

      while (1) { // checking wich word is bigger and swiching between them if needed 

       if (arrPP[pi][pj][t] == arrPP[i][j][t]) 
        continue; 

       if (arrPP[pi][pj][t] > arrPP[i][j][t]) { 


        temp = arrPP[pi][pj]; 
        arrPP[pi][pj] = arrPP[i][j]; 
        arrPP[i][j] = temp; 
        break; 
       } 
       else { 
        break; 
       } 
       t++; 
      } 
      pi = i; 
      pj = j; 

     } 
    } 

} 
} 

outpot:

(отец, мать)

(сестра, брат, дедушка)

(бабушка)

(дядя, тетя)

раунд 0

раунд 1

раунд 2

ожидается outpot:

(отец, мать)

(сестра, брат, дедушка)

(бабка)

(дядя, тетя)

круглый 0

раунд 1

раунд 2

раунд 3

раунд 4

раунд 5

раунд 6

раунд 7

(тетя, брат)

(отец, дедушка, бабушка)

(мать)

(Siter, дядя)

+2

Что говорит отладчик, когда вы проходите через код? –

+0

Я не знаю, как использовать отладчик в visual studio .. но когда я запускаю программу с отладчиком, она выводит вывод на консоль и показывает предварительный уровень процессора, пока он не достигнет 100%.звучит как бесконечный цикл? –

+0

@ChenKahalany Использовать отладчик довольно просто. Перейдите к строке и нажмите F9, чтобы установить точку останова. Затем нажмите F5, чтобы запустить отладчик, нажмите F10, чтобы сделать шаг. Посмотрите результаты в окне часов. – nikau6

ответ

1

Я запускаю ваш код в отладчике, я действительно не пытался посмотреть, работает ли он, я o nly попытался найти, почему вы получаете бесконечный цикл. Проблема в том, что:

while (1) 
    { 
     if (arrPP[pi][pj][t] == arrPP[i][j][t]) 
      continue; 
      ... 

Если результат сравнения положительный, вы вводите бесконечный цикл. Это бывает при сравнении деда с бабушкой.

+0

Это решает. Спасибо!! –

+0

Хорошо, но ваш код работает только потому, что они представляют собой четыре элемента в вашем 3D-массиве, а sizeof (arrPP) дает размер указателя, который ... четыре для вас. Это просто удача. Вам нужно хранить размер вашего 3D-массива где-то в вашем коде. – nikau6

Смежные вопросы