2014-12-31 33 views
6


在終端沒有輸出(深入淺出C)

我正在經歷從頭部一次C類書籍一些練習。還有一個jukeBox程序。
來源是在這裏:

#include <stdio.h> 
#include <string.h> 

char tracks[][80] = { 
    "I left my heart in Harvard Med School", 
    "Newark, Newark - a wonderful town", 
    "Dancing with a Dork", 
    "From here to maternity", 
    "The girl from Iwo Jima", 
}; 

void find_track(char search_for[]){ 
    int i; 

    for (i = 0; i < 5; i++) { 
     if (strstr(tracks[i], search_for)) 
      printf("Track %i: '%s'\n", i, tracks[i]); 
    } 
} 
int main(){ 
    char search_for[80]; 
    printf("Search for: "); 
    fgets(search_for, 80, stdin); 
    find_track(search_for); 

    return 0; 
} 

我使用終端來編譯,看看該程序的輸出,gcc版本4.8.2,如:

gcc pr.c -o pr 

每當我嘗試運行該程序,輸入搜索字符串我沒有輸出。程序只是完成執行並退出。

另外我想提一下,我試圖在ideone.com here上編譯此代碼。
可能存在哪些問題?終端根本不顯示任何輸出。

+1

可能有幾個不同的問題,所以最好嘗試一步一步的調試並觀察行爲。第一個猜測(用我非常生鏽的C技巧)可能是你只是輸入了錯誤的字符串(例如不考慮lettercase)。也許你應該首先嚐試用更簡單的字符串來避免這種可能的錯誤。 –

+3

哇。問題的完整描述,甚至是ideone的鏈接。正確詢問「幫我調試」的問題現在非常罕見。 – luk32

+1

太糟糕了,它是一個確切的副本。副本沒有正確回答,但建議的修復方法很好。 – usr2564301

回答

7

fgets讀取換行符並將其放入緩衝區。所以你輸入的字符串在數組中永遠不會找到。修改代碼以在輸入後禁止換行,如下所示:search_for[strlen(search_for)-1]='\0';。這應該更好。

+0

請注意,只做*時,最好確保不要完全填充緩衝區或按EOF。 – usr2564301

+3

應該是'if(search_for [strlen(search_for)-1] =='\ n')search_for [strlen(search_for)-1] ='\ 0';' –

+1

哦,我很快就會接受你的回答,我想說這是與本書完全相同的源代碼,我不知道這些,所以非常感謝! –

0

在調用函數之前放置此代碼。

search_for[strlen(search_for)-1]='\0'; 

您將得到正確的輸出。