Problema al ejecutar programas

Iniciado por Jrlens, 29 Agosto 2014, 20:09 PM

0 Miembros y 1 Visitante están viendo este tema.

Jrlens

Hola a todxs, el caso es que me vi sumergido en un programa complejo que al ejecutarlo no funcionaba bien pero estaba bien escrito (porque era de un libro). Así que pensé que algo iba mal con el IDE y probe con un programa sencillo en el que usara alguna función de entrada tipo fgets(). Por ejemplo este:

#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, search_for))
printf("Track %i: '%s'\n", i, tracks);
}
}
int main()
{
char search_for[80];
printf("Search for: ");
fflush(stdout);
fgets(search_for, 80, stdin);
find_track(search_for);
return 0;
}

El programa busca texto en el array de string e imprime el titulo de la canción si coincide algún término, lo ejecuto, me pide que inserte una palabra y cuando le doy a intro se termina de ejecutar pero no imprime nada. He probado con un compilador Online y se ejecuta perfectamente. ¿Tenéis alguna idea de qué pueda pasar?

P.D:He probado tanto en windows como en linux, varios IDEs y nada de nada.
Gracias por vuestro tiempo.

engel lex

procura usar las etiquetas GeSHi al publicar codigo...

recuerda algo cuando tengas un problema compilando normalmente es error de tu codigo, solo un 0.0001% de las veces va a ser error del compilador

aprende a leer los errores...

tu codigo
Código (cpp) [Seleccionar]
#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, search_for))
            printf("Track %i: '%s'\n", i, tracks);
    }
}

int main() {
    char search_for[80];
    printf("Search for: ");
    fflush(stdout);
    fgets(search_for, 80, stdin);
    find_track(search_for);
    return 0;
}


el error
Citarmain.cpp:15:38: error: cannot convert 'char (*)[80]' to 'const char*' for argument '1' to 'char* strstr(const char*, const char*)'

estás tratando de leer un char[][] como si fuera un char[]

solo tienes que corregir en el for, porque tienes que usar
tracks[i]

por otro lado se te da un segundo error...
cuando usas fgets te captura el "enter" como un salto de linea (\n)
agregando
strtok(search_for, "\n");
luego del salto de linea resuelves ese segundo error...

por ultimo un consejo... si tu tracks tuviera 1.000.000 de canciones y tu resultado es solo la primera, el igual recorreria 1.000.000 de posibles soluciones, para evitarlo usa despues del printf
break;

eso forzará a salir del for o puedes usar
return;

eso forazará a salir de la funcion
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Jrlens

#2
Perdona me acabo de dar cuenta que el codigo de mi mensaje se ha copiado mal. Este es mi codigo: #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: ");
fflush(stdout);
fgets(search_for, 80, stdin);
find_track(search_for);
return 0;
}


Compila perfectamente sin errores y no funciona.

EDITO: el problema era del salto de línea, efectivamente tenías razón. ¿Por qué los compiladores harán eso y en los libros no lo comentan? Que jodienda...

Gracias de nuevo.