自动点唱机代码中的错误(首先是C)

我正在使用Head First C书学习C编程。 所以我正在尝试编译我们可以在第94页找到的代码:

#include  #include  char tracks[][80] = { "I left my heart in Harvard Mead 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(void) { char search_for[80]; printf("Search for: "); fgets(search_for, 80, stdin); find_track(search_for); return 0; } 

看看这个输出:

 -------------------------------------------------- ---------------
 ./jukebox  - 
搜索:城镇 - 
 kawaban9a-14H:〜/ Code / C / Head_C / Chapter_3 $(所以,没有任何反应) - 
 -------------------------------------------------- ---------------

没关系,没有编译器投诉,但是当我运行它时,没有结果。 我多次阅读这段代码,我无法理解为什么,这里的错误是什么? 如果有人可以帮助我,我将不胜感激。

以后几分钟……

谢谢你的朋友cnicutar,你的回答帮我解决了'\n'的问题。 我通过在调用find_track()函数之前插入一段代码来解决这个问题。

看看这个:

 int main(void) { char search_for[80]; printf("Search for: "); fgets(search_for, 80, stdin); size_t ln = strlen(search_for) - 1; if (search_for[ln] == '\n') search_for[ln] = '\0'; find_track(search_for); return 0; } 

问题是fgets将换行符存储在目标字符串中。 所以你的strstr需要找到"town\n" 。 一种解决方案是在fgets之后修剪search_for以摆脱换行符。

用以下内容替换fgets

 scanf("%79s", search_for);