【发布时间】:2014-02-18 04:00:48
【问题描述】:
我写了一个小程序,它从 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;
}
我真的不知道为什么它有时有效,有时却无效。我在上面坐了很长时间,但不能更改代码,所以它会一直工作。有人可以帮我吗?怎么了?代码应该如何显示才能使程序始终运行?
【问题讨论】:
-
在调试器中运行调试构建not会发生什么?如果你调试发布版本会发生什么(这更难做,因为调试器不会知道所有值)?
-
我推荐适当的缩进,它确实有助于更好地理解代码
-
noelicus,我该怎么做?我不是来自英语国家,理解你的意思有点问题。如果你能告诉我怎么做,我将不胜感激。
-
memcpy(wsk->word, tab2, 30);wsk->word不一定是30的大小,只要简单地替换指针即可。 -
我发布答案(示例)。还有
while(!feof(fp))有潜在问题,改成while(EOF!=fscanf(fp,"%s\n", word))
标签: c list debugging sorting structure