你能找出这段代码中的错误吗,即使我传递了有效的参数来查找,也无法打印歌曲
#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 askedSong[80];
printf("%s", "Hey buddy, what is the good one today? ");
fgets(askedSong, sizeof(askedSong), stdin);
find_track(askedSong);
return 0;
}
答案 0 :(得分:2)
答案 1 :(得分:1)
这里的问题是 fgets
在 '\n'
中包含尾随换行符 askedSong
。
这是我找到它的方式---
我在调试器中运行该程序并在 find_track()
中放置了一个断点。然后当提示我在命令行上输入“girl”时,看到函数的参数是“girl\n”。
这是我在调试器中看到的:
Hey buddy, what is the good one today? girl
Breakpoint 1, find_track (search_for=0x7fffffffd9c0 "girl\n") at test.c:15
15 for(i = 0; i < 5; i++) {
(gdb)
在 C 中有很多古怪的方法来修剪“\n”:Removing trailing newline character from fgets() input
答案 2 :(得分:1)
fgets extra \n 的问题(输入)
#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)!=NULL) {
printf("Track %i: '%s'\n", i, tracks[i]);
}
}
}
int main() {
char askedSong[80];
printf("%s", "Hey buddy, what is the good one today? ");
scanf("%s",askedSong);// try to use scanf to ovoid \n in the buffer
find_track(askedSong);
return 0;
}
答案 3 :(得分:1)
fgets
在字符串中留下换行符。轻松修复:
fgets(askedSong, sizeof(askedSong), stdin);
askedSong[strcspn(askedSong, "\n")] = 0;