Error en el código de la máquina de discos (encabezado primero C)

Estoy estudiando progtwigción en C con Head First C book. Así que estoy tratando de comstackr este código que podemos encontrar en la página 94:

#include  #include  char tracks[][80] = { "I left my heart in Harvard Mead 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(void) { char search_for[80]; printf("Search for: "); fgets(search_for, 80, stdin); find_track(search_for); return 0; } 

Mira esta salida:

 -------------------------------------------------- ---------------
 ./jukebox -
 Buscar: ciudad -
 kawaban9a-14H: ~ / Code / C / Head_C / Chapter_3 $ (entonces, no pasa nada) -
 -------------------------------------------------- ---------------

Está bien, no hay queja del comstackdor, pero cuando lo ejecuto, no hay resultado. Leí este código varias veces y no puedo entender por qué, ¿dónde está el error? Si alguien me puede ayudar con esto, estaré agradecido.

Algunos minutos más tarde …

Gracias, amigo cnicutar, por su respuesta que me ayudó a resolver el problema con '\n' . Resolví este problema simplemente insertando un fragmento de código antes de la llamada a la función find_track() .

Echale un vistazo:

 int main(void) { char search_for[80]; printf("Search for: "); fgets(search_for, 80, stdin); size_t ln = strlen(search_for) - 1; if (search_for[ln] == '\n') search_for[ln] = '\0'; find_track(search_for); return 0; } 

El problema es que fgets almacena la nueva línea en la cadena de destino. Así que tu strstr necesita encontrar "town\n" . Una solución sería recortar search_for after fgets para deshacerse de la nueva línea.

Reemplazar fgets con:

 scanf("%79s", search_for);