终端无输出(Head First C)

时间:2014-12-31 11:59:20

标签: c


我正在阅读Head First 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上编译此代码。
可能有什么问题?终端根本不显示输出。

2 个答案:

答案 0 :(得分:7)

fgets读取换行符并将其放入缓冲区。因此,您在数组中找不到您输入的字符串。修改代码以在输入后禁止换行,如下所示:search_for[strlen(search_for)-1]='\0';。这应该会更好。

答案 1 :(得分:0)

在调用函数之前放置此代码。

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

您将获得正确的输出。