Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的C程序不打印if语句的输出?_C_Printf - Fatal编程技术网

为什么我的C程序不打印if语句的输出?

为什么我的C程序不打印if语句的输出?,c,printf,C,Printf,这个程序应该输出if语句中的两个变量。然而,它不是,而是任何印刷在外面的东西 #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 materni

这个程序应该输出if语句中的两个变量。然而,它不是,而是任何印刷在外面的东西

#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: \n");
    fgets(search_for, 80, stdin);
    find_track(search_for);
    return 0;
}
#包括
#包括
字符轨道[][80]={
“我把我的心留在哈佛医学院”,
“纽瓦克,纽瓦克-一个美妙的小镇”,
“和傻瓜跳舞”,
“从这里到产妇”,
“硫磺岛的女孩”,
};
void find_track(char search_for[])
{
int i;
对于(i=0;i<5;i++){
if(strstr(轨道[i],搜索)
printf(“磁道%i:'%s'\n',i,磁道[i]);
}
}
int main()
{
[80]的字符搜索;
printf(“搜索:\n”);
fgets(搜索,80,标准输入法);
查找跟踪(搜索);
返回0;
}

我希望它输出以显示曲目编号和相关字符串,但它没有。

fgets函数将读取一行文本直到换行符,如果有空间,它将读取并存储换行符。例如,如果您输入“here”,则
搜索
将包含
“here\n”
。没有任何字符串包含换行符,因此您永远找不到任何内容

您需要从读取的字符串中删除换行符:

search_for[strcspn(search_for,"\n")]=0; 

strcspn
函数返回字符串开头不在给定列表中的字符数。因此,如果字符串包含换行符,它将返回换行符的索引,否则它将包含终止空字节的索引。

fgets函数将读取一行文本直到换行符,如果有空间,它将读取并存储换行符。例如,如果您输入“here”,则
搜索
将包含
“here\n”
。没有任何字符串包含换行符,因此您永远找不到任何内容

您需要从读取的字符串中删除换行符:

search_for[strcspn(search_for,"\n")]=0; 

strcspn
函数返回字符串开头不在给定列表中的字符数。因此,如果字符串包含换行符,它将返回换行符的索引,否则它将包含终止空字节的索引。

谢谢。因此,这对于每个实例来说都是必要的,在使用它进行搜索时,会使用一个
fgets
函数?@AbdiMo如果您不希望字符串包含换行符,则选择“是”。谢谢。因此,这对于每个实例来说都是必要的,当使用
fgets
函数来搜索时?@AbdiMo如果不希望字符串包含换行符,则选择“是”。