2016-03-31 15 views
0

これは私の教授が提供するサンプルプログラムです。その機能は、ツリーのリンクされたリストを検索し、天気の結果を返すかどうか、それはユーザーが入力したツリーを見つけられません。しかし、私が何を入力しても、常にfalseを返します。どうしたの?リンクリストと構造体を含むサンプルプログラムは動作しません

#include <stdio.h> 
#include <string.h> 
#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); 
} 
+1

これはデバッグサービスではありません。 [ask]を読んでください。 – Olaf

+0

これはデバッグのためのもう1つの優れたリソースです:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ –

答えて

1

fgets改行文字も含む行を読み込みます。 checktreeの呼び出しの前にコードを削除するコードを追加してください。

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

if (checktree(start, treename)) { ... } 
関連する問題