Почему моя программа на C не печатает вывод из оператора if? - PullRequest
0 голосов
/ 31 декабря 2018

Эта программа должна вывести две переменные в операторе 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 голосов
/ 31 декабря 2018

Функция fgets будет читать строку текста до новой строки, а будет читать и сохранять новую строку , если для этого есть место.Так, например, если вы введете «здесь», то search_for будет содержать "here\n".Ни одна из ваших строк не содержит символ новой строки, поэтому вы ничего не найдете.

Вам нужно будет удалить символ новой строки из строки, которую вы прочитали:

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

Функция strcspn возвращаетколичество символов от начала строки, которых нет в данном списке.Поэтому, если ваша строка содержит символ новой строки, она возвращает индекс новой строки, в противном случае она содержит индекс завершающего нулевого байта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...