2014-12-31 32 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'; 

您将得到正确的输出。