victor hsu 1B Ответов: 2

Он всегда возвращает -1 и как его решить (мне нужна помощь~~~~~~~), и я хочу сравнить все имена


#include <stdio.h>
#include <stdlib.h>


int compare_str(char info[][20]);
void swap(char info[20]);

int main()
{
    int n=0;
    int b,c,i,j;
    c =2;
    char tmp[20];
    char info[20][20]=
    {
        "christina",
        "victor",
        "chris",
        "chester",
        "elta",
        "kezia",
        "bew",
        "grace",
        "mavis",
        "tony",
        "oat",
        "adonique",
        "ploy"
    };
    for(b=0; b<13; b++)
    {
        printf("%d", c);
        c=compare_str(info[20]);
        printf("%d", c);
        if (c==1)
        {
            swap(info[20]);
        }
    }
    printf("Sorted list in ascending order:\n\n", info[20]);
    for(j=0; j<12; j++)
    {
        printf("%s\n",info[j]);
    }
    return 0;
    system("pause");

}


int compare_str(char info[][20])
{
    int i=0;
    int j=0;

    if(info[i][j]==info[i+1][j])
    {
        while(info[i][j]==info[i+1][j])
        {
            if (info[i][j]=='\0' && info[i+1][j]=='\0')
            {
                return 0;
                break;
            }
            i++;
            j++;
        }
        if (info[i][j]>info[i+1][j])
        {
            printf("should swap");
            return 1;
        }
        else if(info[i][j]<info[i+1][j])
        {
           printf("bla");
            return -1;
        }
    }
    if(info[i][j]<info[i+1][j])
    {
        return -1;
    }
    else if(info[i][j]>info[i+1][j])
    {
        printf("should swap");
        return 1;
    }


}


void swap(char info[20])
{
    printf("swap");
    char tmp[20];
    int i;
    for(i=0; i<=19; i++)
    {
        tmp[i]=info[i];
        info[i]=info[i+1];
        info[i+1]=tmp[i];
    }
}


Что я уже пробовал:

я пытался напечатать что-то в коде и протестировать, но до сих пор не знаю, как это решить

2 Ответов

Рейтинг:
2

CPallini

Как было предложено, используйте указатели, например

#define ITEMS 13
//.....    
const char * info[ITEMS]=
{
  "christina",
   "victor",
   "chris",
   "chester",
   "elta",
   "kezia",
   "bew",
   "grace",
   "mavis",
   "tony",
   "oat",
   "adonique",
   "ploy",
};


Тогда, например, swap операция становится
void swap( const char * info [], int i, int j)
{
  const char * tmp = info[i];
  info[i] = info[j];
  info[j] = tmp;
}


И другие операции, такие как compare и sort, может быть реализован аналогичным образом.


Рейтинг:
0

Patrice T

int compare_str(char info[][20])
void swap(char info[20])

Никогда не указывайте размер массива в объявлении функции.
Ваш код совершенно неверен, вам нужно научиться пользоваться указателями потому что вы хотите поменять местами имена в массиве на main из подпрограммы.
c=compare_str(info[20]);

Как вы определяете, какие имена сравнивать?
swap(info[20]);

Как вы определяете, какие имена поменять местами?

Цитата:
я пытался напечатать что-то в коде и протестировать, но до сих пор не знаю, как это решить

Совет: используйте отладчик, чтобы увидеть, что делает ваш код.
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


CPallini

5.

Patrice T

Спасибо