2015-12-09 4 views
1

Так у меня есть пример array:Bubble сортировка с зЬгсром

char* drivers[10] = {"Mark", "Jacob", "Andre", "Thomas", "Hellboy"}; 

И в srand функции, которая генерирует случайное «время прохождения круга» для каждого водителя и хранит LAPTIME к array:

float lap_time[10]; 

Мне нужно отсортировать их соответственно, чтобы получить «Топ 1» и «Последний 1», я думаю о пузыре, но он не работает так, как должен. Он генерирует ошибку. Ошибка шины или что-то подобное. Если я удалю часть strcpy(), она будет работать так же хорошо. Но что-то связанное с strcpy() имеет ошибку.

Это просто функция сортировки, все остальное работает отлично. Когда strcpy() добавляется с массивом char tmp[], эта функция сработает.

printf() для этой функции работает. Просто проблема с получением моего strcpy() для работы.

Сортировка:

#define maks 10; 

int Fastestdriver(char* drivers[], float lap_times[], char tmp[maks]) 
{ 
    int i, j, a; 

    for (i = 0; i < 10; ++i) 
    { 
     for (j = i+1 ; j < 10 ; ++j) 
     { 
      if (lap_time[i] < lap_time[j]) 
      { 
       a = lap_time[i]; 
       lap_time[i] = lap_time[j]; 
       lap_time[j] = a; 
       strcpy(tmp, drivers[i]); 
       strcpy(drivers[i], drivers[j]); 
       strcpy(drivers[j], tmp); 

      } 
     } 
    } 

    return 0; 
} 
+0

изменить на 'char * tmp = drivers [i]; drivers [i] = drivers [j]; drivers [j] = tmp; ' – BLUEPIXY

+1

Здесь не нужно использовать' strcpy'. Просто перетасуйте указатели на свои струны. –

+2

Как это даже скомпилировать? '#define maks 10;' не должно иметь точку с запятой. –

ответ

3

Вы объявили и инициализируется, как это -

char* drivers[10]={"Mark", "Jacob", "Andre", "Thomas", "Hellboy"}; 

drivers[0], drivers[1] строковые литералы (константы ? Не должны быть изменены) и в функции вы пытаетесь изменить их с помощью strcpy, поэтому эта проблема-

strcpy(drivers[i], drivers[j]); 
strcpy(drivers[j], tmp); 

Вы можете просто присвоить указатели друг другу -

водители
char *tmp;     // declare char * not char [] 
... 
tmp=drivers[i]; 
drivers[i]=drivers[j]; 
drivers[j]=drivers[i]; 
3

представляет собой массив с десятью элементами. Элементы «драйверов» являются указателями. Они указывают на небольшие безымянные статические массивы, например «Mark» указывает на массив с пятью символами M, a, r, k и \ 0.

Вы можете просто обменять эти указатели.

Что вы пытаетесь использовать с помощью strcpy: Например, «Mark» является указателем на массив с пятью символами, «Jacob» является указателем на массив из шести символов. Вы не можете обменять автомобили с помощью strcpy, потому что «Jacob» не подходит, где хранится «Mark». Более того, эти массивы, скорее всего, доступны только для чтения, поэтому, даже если все будет иметь одинаковую длину, любая попытка сменить эти массивы приведет к сбою.

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