涉及链接列表和结构的示例程序不起作用

所以,这是我教授提供的示例程序。 它的function是搜索树的链表并返回天气的结果,它发现用户输入的树。 但是,无论我输入什么,它总是返回false。 它出什么问题了?

#include  #include  #define NL 20 typedef struct tree { char tree_name [NL]; struct tree* next; }tree; int checktree (tree *p, char name[]) { int found = 0; while (p != NULL) { if (strcmp(p -> tree_name, name) == 0) found = 1; p = p -> next; } return (found); } int main (void) { /* declaring variables to hold tree nodes */ tree tree1, tree2, tree3, tree4; /* declaring the starting and traveling pointers */ tree *p, *start; char treename[NL]; /* putting tree names into each node */ strcpy (tree1.tree_name, "Maple"); strcpy (tree2.tree_name, "Fir"); strcpy (tree3.tree_name, "Pine"); strcpy (tree4.tree_name, "Oak"); /* setting the start of the list at tree1 */ start = &tree1; /* linking the other trees together */ tree1.next = &tree2; tree2.next = &tree3; tree3.next = &tree4; /* sets tree4 as the last node of the list */ tree4.next = NULL; /* checking if a tree is in the list */ printf ("Enter tree name to search: "); fgets (treename,sizeof(treename),stdin); if (checktree(start, treename)) printf ("%s was found in our list of trees.\n", treename); else printf ("%s was not found in our list of trees.\n", treename); return (0); } 

fgets读取一行也包含换行符。 在调用checktree之前添加代码以将其删除。

 fgets (treename,sizeof(treename),stdin); int len = strlen(treename); if ( treename[len-1] == '\n' ) { treename[len-1] = '\0'; } if (checktree(start, treename)) { ... }