[ Foro de C ]

Problema extraño

28-Aug-2009 12:41
emuletas yp
1 Respuestas

Este es mi codigo fuente:

#include <stdio.h>
#include <string.h>

main()
{
char nombres[10][10];
char nombres2[80];
int i;
for(i=0; i=10; i++)
{
if (i==0){

prinft("Introduce un nombre de 10 letras de maximo.\n");
goto woops;
}

printf("Introduce otro nombre (en total seran 10).\n");
woops:
gets(nombres[i]);
}

printf("Ahora introduce nombres y el programa comprobaras si estan entre los diez que has escrito. Introduce fin cuando quieras salir");
do
{
gets(nombres2);
if (strcmp (nombres, nombres2)!=0)printf("El nombre %s no esta entre los diez anteriores", nombres2);
else ("El nombre %s esta entre los diez anteriores", nombres2);

} while (strstr (nombres2, "fin")==NULL);
}

Y estos son mis errores del compilador:

******@**********:~$ gcc cadenas.c -o cadenas
cadenas.c: In function ‘main’:
cadenas.c:26: warning: passing argument 1 of ‘strcmp’ from incompatible pointer type
/tmp/ccEtQzRZ.o: In function `main':
cadenas.c:(.text+0x5b): warning: the `gets' function is dangerous and should not be used.
cadenas.c:(.text+0x30): undefined reference to `prinft'
collect2: ld returned 1 exit status

Hasta aquí.

Espero que me puedan ayudar. Gracias risa


29-Aug-2009 00:27
Nacho Cabanes (+83)

No es un error extraño: mira tu línea

if (strcmp (nombres, nombres2)!=0)

strcmp compara una cadena con otra, mientras que tu variable "nombres" es un array de cadenas:

char nombres[10][10];

así que supongo que realmente querrás comparar con "nombres[i]".

Lo de "gets" no es un error, sino un aviso, porque esta orden puede dar problemas si introduces un texto más grande que la capacidad de tu cadena.

Y lo de "printft" es simplemente que en una línea has escrito mal "printf". Para descubrir ese tipo de problemas son buenos los editores que realzan la sintaxis en colores.

Pero cuidado: hay más problemas en tu fuente. Por ejemplo, el "for" no es correcto (no te doy más pistas, pero es fácil):

for(i=0; i=10; i++)

Además, deberías usar "else" en vez de "goto", para que el fuente sea más legible.

Y también una mejora: el "if" que hay dentro del "do..while" no debería escribir siempre, sino llevar un contador, para que no te escriba 10 veces "no estaba entre los anteriores", sino sólo una vez.







(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)