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

时间:2018-12-31 15:49:09

标签: 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 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;
}

我希望它输出以显示曲目号和关联的字符串,但不会。

1 个答案:

答案 0 :(得分:2)

fgets函数将读取一行文本,直到换行符为止,如果有空格,它将读取并存储换行符。因此,例如,如果您输入“ here”,则search_for将包含"here\n"。您的所有字符串都不包含换行符,因此您什么也找不到。

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

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

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