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

Почему моя программа не может поменять местами (справка~~~~~)


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

void swap(char *ap,char *bp,int x);
void compare(char *ap,char *bp);
int main()
{
    int b,x,y,j,damn;
    int i=0;
    char info[13][20]=
    {
        "christina",
        "victor",
        "chris",
        "chester",
        "elta",
        "kezia",
        "bew",
        "grace",
        "mavis",
        "tony",
        "oat",
        "adonique",
        "ploy"
    };
    char *ap;
    ap=info[i];
    char *bp;
    bp=info[i+1];
    for(b=0; b<13; b++)
    {
        while(i<13)
        {
            compare(ap,bp);
            i++;
        }
        for(y=0; y<13; y++)
        {
            printf("%s\n",info[y]);
        }
        return 0;
    }
}

void compare(char *ap,char *bp)
{
    int i=0;
    int x;
    int damn;
    if(*ap==*bp)
    {
        int j=1;

        while (*(ap+j)==*(bp+j))
        {

            if (*(ap+j) == '\0' && *(bp+j) == '\0')
            {
                damn=0;
                break;
            }
            j++;
        }
        if (*(ap+j)<*(bp+j))
        {
            damn=1;
        }
        if (*(ap+j)>*(bp+j))
        {
            damn=-1;
        }
    }
        if (*ap<*bp)
        {
            damn=1;
        }
        if (*ap>*bp)
        {
            damn=-1;
        }
        if (damn==-1)
        {

            while(*(ap+x) != '\0' || *(bp+x) != '\0')
            {
                swap(ap,bp,x);
                x++;
            }
        }
}

void swap(char *ap,char *bp,int x)
{
    char tmp[20];
    for(x=0; x<19; x++)
    {
        printf("k");
        *tmp=*ap;
        *ap=*bp;
        *bp=*tmp;
    }
}


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

я попытался напечатать k в функции swap, но она не показывалась

1 Ответов

Рейтинг:
2

OriginalGriff

Если буква "К" не будет напечатана, то swap это не называется.
Если swap не будучи вызванным, то тело самого while петли в compare никогда не исполняется.
Это означает, что условие не соответствует.

Так почему бы и нет? Вот в чем вопрос.

И это зависит от вас, чтобы выяснить - отладка является частью вашего домашнего задания: написание кода-это легкий бит, навык заключается в том, чтобы заставить его работать после этого!
Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поставьте точку останова в первой строке таблицы. compare выполните функцию и запустите свой код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!