O código não retorna nada

1

O seguinte programa foi feito de acordo com o livro 'Head First C'. É suposto ser capaz de encontrar e retornar faixas de música contendo uma palavra de busca, mas não retorna nada. Ah, e eu tentei criar um espaço 'código' - recuou por quatro, mas me perdoe se não funcionar.

#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("Match found.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;
}
    
por drakinosh 24.10.2013 / 04:48

1 resposta

4

Você tem 2 erros de digitação que impedirão a compilação deste código:

  1. uma vírgula extra após Jima na matriz;
  2. falta de ponto e vírgula no final da instrução printf

Se você fez uma depuração de printf , verá que strstr está retornando NULL everytime, portanto, uma correspondência nunca é encontrada.

printf("%s", strstr( tracks[i], search_for ) );

Por que isso? A entrada de stdin não está sendo finalizada corretamente. Você precisa pressionar ctrl + d (= EOF) depois de digitar sua palavra de busca.

Na verdade, você precisa pressioná-lo duas vezes para finalizar a entrada e liberar o buffer; então funciona como pretendido. Experimente. Exemplo (é sensível a maiúsculas e minúsculas):

Iwo ctrl + d ctrl + d

    
por chaskes 24.10.2013 / 08:58