为什么程序没有给我想要的输出?出了什么问题?
所以我是 C 编程的新手,我在其中一本书中看到了一个程序并尝试运行它。该程序接受一个字符串并检查主字符串中的字符串位置并输出字符串 id 和字符串。
#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;
}
这是终端输出:
PS C:UsersGDocumentsC programs> gcc try1.c -o try1 -Wall -pedantic -std=c99
PS C:UsersGDocumentsC programs> ./try1
Search for: town
PS C:UsersGDocumentsC programs>
如您所见,它应该已经输出了轨道 ID 和轨道。但它不是,任何形式的帮助表示赞赏!
回答
fgets留下一个尾随换行符,因此您实际上是在搜索"townn"而不是"town",这显然不会产生匹配项。修剪换行符:
fgets(search_for, 80, stdin);
search_for[strcspn(search_for, "n")] = ' ';