A mí me funciona bien el código. Puede ser porque estés introduciendo cadenas demasiado largas o valores inválidos que hacen que queden restos en el buffer. De todas formas te comento algunas mejoras y seguro que si las implementas funciona correctamente:
* Para usar strlen() hay que importar <string.h>. Esta función devuelve la longitud de la cadena sin contar el '\0' (strlen("hola\0") = 4)
Después de usar scanf() también quedará un '\n' en el buffer. Lo puedes limpiar de nuevo con el while():
Si sigue sin funcionarte comenta qué pruebas estás haciendo o porque sabes que no te está leyendo la segunda cadena.
Muchas gracias , ya funciona cambie gets por fgets y tambienalgunas otras cosas que sugeriste, muchas gracias- Utiliza constantes para los tamaños.
Código
const int SIZE_CADENA = 500; const int SIZE_PALABRA = 50; int main(){ char cadena[SIZE_CADENA]; char palabra[SIZE_PALABRA]; //... }
- Utiliza nombres de variables más descriptivos.
Código:
x -> longitudCadena
w -> longitudPalabra
z -> indiceBusqueda
- La función gets() no debe usarse. Es más seguro utilizar fgets():
Código
fgets(cadena, SIZE_CADENA, stdin); // guarda como mucho SIZE_CADENA-1 caracteres porque reserva el ultimo para '\0'
- La función fflush() está implementada para limpiar el buffer de salida (stdout), no el de entrada (stdin). Tampoco se recomienda usarlo. Además cuando se usa gets()/fgets(), también se guarda el Enter ('\n') al final de la cadena.
* Para usar strlen() hay que importar <string.h>. Esta función devuelve la longitud de la cadena sin contar el '\0' (strlen("hola\0") = 4)
Código
else while(getchar() != '\n'); // sino, significa que la cadena no cabia entera y quedan restos en el buffer. Lo limpiamos.
Después de usar scanf() también quedará un '\n' en el buffer. Lo puedes limpiar de nuevo con el while():
Código
Si sigue sin funcionarte comenta qué pruebas estás haciendo o porque sabes que no te está leyendo la segunda cadena.