C列表排序程序调试后才有效

标签 c list debugging sorting structure

我写了一个小程序,从 txt 文件中读取单词并将它们放入列表中;然后,它对单词进行排序并将它们放回文件中。当我运行该程序时,它卡住了,但是当我调试它时,它运行得很好。我该如何解决这个问题?

这是我的代码。从文件读取到列表并写回文件效果很好(在其他程序上检查过)。我不知道如何按字母顺序对列表进行排序,所以我使用数组:

typedef struct bazaslowek                                    
{
    char *word;
    struct bazaslowek* next;
} baza;

void SORTING (baza **head)
{//================================file->list, works good
    char word[30];
    FILE *fp;
    if ((fp = fopen("bazaslow.txt", "r"))==NULL)
    {
        printf("Error while opening txt file!");
        exit(EXIT_FAILURE);
    }
    else
    {
        while(!feof(fp))
        {
            fscanf(fp,"%s\n", word);
            baza *wsk = *head;
            baza *new = malloc (sizeof(baza));
            new -> next = NULL;
            new -> word = strdup(word);
            if(wsk == NULL)
            {
                new -> next = *head;
                *head = new;
            }
            else
            {
                while(wsk -> next != NULL)
                    wsk = wsk -> next;
                wsk -> next = new;
            }
        }
    }
    fclose(fp);
    //==========================================Here's the sorting, problem is probably here

    baza *wsk= (*head);
    char tab1[31], tab2[31];
    if(wsk ->next != NULL)
        while(wsk->next != NULL)
        {
            memcpy(tab1, wsk->word, 30);
            memcpy(tab2, wsk->next->word, 30);
            if (strcmp(tab1, tab2) > 0)
            {
                memcpy(wsk->word, tab2, 30);
                memcpy(wsk->next->word, tab1, 30);
            }
            wsk = wsk->next;
        }

    //======================list->file, works good
    if ((fp = fopen("bazaslow.txt", "w"))==NULL)
    {
        printf("Error while opening file!");
        exit(EXIT_FAILURE);
    }
    else
    {
        baza *wsk = *head;
        while (wsk != NULL)
        {
            fprintf(fp, "%s\n", wsk->word);
            wsk=wsk->next;
        }
    }
    fclose(fp);
}

int main()
{
    baza *head=NULL;
    printf("Sorting time!\n");
    SORTING(&head);
    return 0;
}

我真的不知道为什么有时有效有时无效。我在它上面坐了很长时间,但无法更改代码,所以它会一直工作。有人可以帮我吗?怎么了?代码应该是什么样子才能使程序始终正常工作?

最佳答案

例如排序样本

baza *outerp, *innerp;
for(outerp=*head;outerp->next != NULL;outerp=outerp->next){
    for(innerp = outerp->next;innerp != NULL;innerp=innerp->next){
        if(strcmp(outerp->word, innerp->word) > 0){
            char *tmp = outerp->word;
            outerp->word = innerp->word;
            innerp->word = tmp;
        }
    }
}

关于C列表排序程序调试后才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378753/

相关文章:

c - 在 Eclipse 中调试 C 程序 : Failed to execute MI command: -data-disassemble

c - 64 位机器上的 strtok

java - 在 Java 中使用列表列表

python - 如何比较python中的两个列表列表

Python 3.x 在矩阵上获取奇数列

javascript - 你的 JavaScript 开发工具箱里有什么?

C: scanf() 接受的参数多于应有的参数

c - 如何将 HFCLK 更改为由微处理器上的低频振荡器控制?

c++ - 过多的线程数会在文件读取时产生更好的结果

java - 附加调试后 Eclipse 是只读的