c -我的程序没有打印出结果



我在c中创建了一个链表,以便将文本文件中的单词按顺序排序。insert函数是在读取具有单词和含义用:分隔的行后添加一个节点。该文件只是具有单词含义格式的字典的行。当我运行代码时,它没有打印任何东西,也没有错误信息

type here
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
struct node 
{
char word[30];
char meaning[50];
struct node *next;//링크
};

void insert(struct node **head, char *word, char *meaning) 
{
struct node *new_node = (struct node*) malloc(sizeof(struct node));
strcpy(new_node->word, word);
strcpy(new_node->meaning, meaning);
new_node->next = NULL;
if (*head == NULL) //빈 리스트
{
*head = new_node;
} 
else if (strcasecmp((*head)->word, word) > 0) //첫위치 삽입
{
new_node->next = *head;
*head = new_node;
} 
else //보통
{
struct node *curr = *head;
while (strcmp(curr->next->word, word) < 0) 
{
curr = curr->next; //탐색위치 head에서 시작, 계속 1칸씩 옮겨가며 찾기
if(curr->next==NULL) break; //if the next node is null, break, insert new_node at the end
}
//순서 제대로 찾으면 그 위치에 연결
new_node->next = curr->next;
curr->next = new_node;
}
}

void print_list(struct node * head) 
{
struct node * cur=head;
while (cur->next!= NULL) 
{
printf("%s : %sn", cur->word, cur->meaning);
if(cur->next==NULL){
return;
}
cur = cur->next;
}
}
int main() 
{
FILE *fp;
char line[150];
fp = fopen("randdict.txt", "r");
if (fp == NULL) 
{
printf("Unable to open file.n");
exit(1);
}
struct node *head = NULL;
while (fgets(line, 150, fp)) 
{
char *new_word = strtok(line, ":");
char *new_meaning = strtok(NULL, ":");
insert(&head, new_word, new_meaning);//알파벳순으로 입력
}
fclose(fp);
print_list(head);
return 0;
}

我试着修改print_list函数,得到一个if返回语句,即使我已经在while循环中有了一个条件,可以帮助我跳出循环。

我在我的网站上重新运行了你的代码,没有改变任何东西,工作正常~

randdict.txt

d:sdf 
a:asfdd
b:sdf
g:bfd
j:gdf
6:gdfg
e:gww
f:wwe
h:r2ssd
j:ewrw

我得到这样的输出:

6 : gdfg
a : asfdd
b : sdf
d : sdf
e : gww
f : wwe
g : bfd
h : r2ssd
j : ewrw

,我认为,根据你的要求,这是正确的…

这里唯一的建议是

  • 检查randdict.txt文件权限
  • 检查随机内容,否则
  • 确保列表中填满了数据
  • 确保我们都在编译相同的代码:)

,

  • 不要忘记为您的列表添加清理例程,现在您有memleak
  • 不建议使用strtok()(现在已弃用),使用strsep()代替

相关内容

  • 没有找到相关文章

最新更新