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

Мой указатель есть проблемы или нет н


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

void swap(char *ap,char *bp);
void compare(char *ap,char *bp);
int main()
{
    int b,c,y;
    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(i=0; i<13; i++)
    {
        printf("k");
        compare(ap,bp);

        i++;
    }
    for(y=0; y<13; y++)
    {
        printf("k");
        printf("%s\n",info[y]);
    }
    return 0;
}


void compare(char *ap,char *bp)
{
    printf("k");
    int x;
    int j=0;
    int damn;
    if(*ap==*bp)
    {
        while (*(ap+j)==*(bp+j))
        {
            if (*(ap+j) == '\0' || *(bp+j) == '\0')
            {
                break;
            }

        }
        if (*(ap+j)<*(bp+j) || *ap<*bp)
        {
            damn=1;
        }
        if (*(ap+j)>*(bp+j)||*ap>*bp)
        {
            while(*(ap+j) != '\0' || *(bp+j) != '\0')
            {
                swap(ap,bp);
                j++;
            }
        }
    }
}

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


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

я попытался отладить печать sth в функции, как я печатаю в функции сравнения, и она не печаталась, но я не знаю, как это сделать, пожалуйста, помогите~~~~

Richard MacCutchan

Купите себе хорошую книгу по Си и изучите ее. Вы не научитесь правильно программировать, размещая здесь вопросы.

3 Ответов

Рейтинг:
2

OriginalGriff

Вчера вам сказали: используйте отладчик.
Почему моя программа не может поменять местами (справка~~~~~)[^]

Посмотрите, что происходит с вашими переменными во время выполнения кода.
Но это странный код ... почему вы увеличиваете переменные цикла дважды?

for(i=0; i<13; i++)
{
    printf("k");
    compare(ap,bp);

    i++;
}


victor hsu 1B

О я++

Рейтинг:
1

Jochen Arndt

Тебе не кажется, что ты что-то упустил?:

char *ap;
ap=info[i];
char *bp;
bp=info[i+1];
for(i=0; i<13; i++)
{
    printf("k");
    compare(ap,bp);
     
    i++;
}
Вы выполняете одну и ту же операцию с одними и теми же данными 13 раз. Вы должны переместить задания для ap и bp в петлю.


victor hsu 1B

так я к АП и ВР++++ верно?

Jochen Arndt

Подумайте об этом.

Увеличение указателя char* позволит ему указывать на следующий символ строки. Но вы должны вызвать compare для следующих строк вашего массива info []. Таким образом, вы должны увеличить индекс для этого массива, что уже сделано, потому что это переменная цикла. Все, что вам нужно, - это использовать эту переменную, что можно сделать, переместив назначения для ap и bp в цикл.

Рейтинг:
1

CPallini

Я предлагаю вам "разделяй и властвуй": используйте два функции, одна для сравнения строк, а другая для сортировки:

int compare( const char * sl, const char * sr)
{
  //implementation left to the OP
}

void sort( const char * info[], int items)
{
  // implementation left to the OP
  // uses the compare and swap functions
}


victor hsu 1B

вы имеете в виду разделение на две функции?