c - 为什么程序没有给我想要的输出?出了什么问题?
问题描述
所以我是 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:\Users\G\Documents\C programs> gcc try1.c -o try1 -Wall -pedantic -std=c99
PS C:\Users\G\Documents\C programs> ./try1
Search for: town
PS C:\Users\G\Documents\C programs>
如您所见,它应该已经输出了轨道 ID 和轨道。但它不是,任何形式的帮助表示赞赏!
解决方案
fgets
留下一个尾随换行符,因此您实际上是在搜索"town\n"
而不是"town"
,这显然不会产生匹配项。修剪换行符:
fgets(search_for, 80, stdin);
search_for[strcspn(search_for, "\n")] = '\0';
推荐阅读
- c# - 在 Delphi 中,Math.Round() 和 MidpointRounding.AwayFromZero 的等价物是什么?
- reactjs - 无法在 React JS 中使用自定义类
- wordpress - 谷歌网站验证文件
- ios - Xcode iOS 模拟器允许我的 Cordova 应用程序检索地理位置位置,但观看位置出现超时错误
- docker - 如何使用 DevOps 管道部署多个微服务
- c - "int *p =0;" 和有什么区别 和“int *p;*p=0;”
- javascript - 查找和替换某些文本;下一次出现的字符
- javascript - 如何检查用户是否被禁止?
- php - 对列表的行有更好的方法吗?
- python - 如何用字典编写循环