Cita de: K-YreX en 4 Noviembre 2020, 02:02 AMMuchas gracias , ya funciona cambie gets por fgets y tambienalgunas otras cosas que sugeriste, muchas gracias
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:
- Utiliza constantes para los tamaños.
Código (c) [Seleccionar]
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 [Seleccionar]
x -> longitudCadena
w -> longitudPalabra
z -> indiceBusqueda- La función gets() no debe usarse. Es más seguro utilizar fgets():
Código (c) [Seleccionar]
printf("Introduce una cadena: ");
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.
Con el siguiente código puedes limpiar el buffer de entrada y al mismo tiempo eliminar el salto de línea al final de la cadena. Dos pájaros de un tiro (esto debe ir justo después del fgets() anterior):
* 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 (c) [Seleccionar]
if(cadena[strlen(cadena)-1] == '\n') cadena[strlen(cadena)-1] = '\0'; // Si el ultimo caracter es el Enter, lo eliminamos con '\0'
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 (c) [Seleccionar]
scanf("%d", &repetir);
while(getchar() != '\n'); // Limpia todo el buffer de entrada
Si sigue sin funcionarte comenta qué pruebas estás haciendo o porque sabes que no te está leyendo la segunda cadena.