Ver Mensaje Individual
  #9 (permalink)  
Antiguo 17/02/2014, 21:27
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

Bueno...
Te lo voy explicar por que creo que solo te sale la cadena completa.
Después me dirás si estoy en lo cierto. ;)
cuando creas una cadena o como lo llames, de esta manera char cadena[10]; tienes como si fuera 10 variables seguidas cadena0, cadena1, cadena2.... hasta llegar a cadena9¿Correcto?
Bien..
se supone que estas variables tienen en ellas cualquier valor residuo de otros programas.
Son variables salvajes por que no sabemos lo que contiene hasta inicialisarlas.
Normalmente le damos el valor de 0 a todas, cosa que tu no lo haces en ningún momento.
como se ve eso ya es un grande problema, por que a la hora de mirar todas las casas, si no ocupa la palabra toda la cadena ya sabes que contiene 0 caso ayas inicialisado, caso contrario ni sabes lo que contiene esas casas.
Eso se puede comprobar muy fácilmente.
Por ejemplo si la cadena es como la de arriba:
char cadena[10];
le metemos algo mas corto no se algo como "LOL" XD
La cadena quedaria asi:
cadena[0] = 'L'
cadena[1] = 'O'
cadena[2] = 'L'
cadena[3] = ? <---¿pero aqui como le queda?
cadena[4] = ? <---¿y aqui?
cadena[5] = ?
cadena[6]= ?
cadena[7]= ?
cadena[8]= ?
cadena[9]= ?

Bueno, si la habíamos inicialisado ya sabemos que debería haber '0' en todas estas casas.
cadena[0] = 'L'
cadena[1] = 'O'
cadena[2] = 'L'
cadena[3] = '0'
cadena[4] = '0'
cadena[5] = '0'
cadena[6] = '0'
cadena[7] = '0'
cadena[8] = '0'
cadena[9] = '0'
Creo que eso ya es un error por que 0 no es alpha.
Si no inicialisamos la cadena peor aun por que no sabemos ni lo que hay en estas casas.
Otra cosa a destacar.
Si la palabra es mas corta que la cadena[10] como en el caso anterior "LOL" después de la ultima letra siempre va un \0 ('0') que indica que la cadena termina ahí.
Cuando escribes lol y tienes 10 huecos cuando pulsas enter al final se escribe un cero.
Puedes comprobar todo eso que digo imprimiendo una letra después de la ultima y veras lo que contiene.
Es mas, mejor imprimes todos las casillas para hacer comprobaciones, solo así tendrás control sobre tu código.
Siempre puedes hacer comprobaciones imprimiendo la cadena para ver el por que pasa lo que pasa.
Sabiendo eso creo que ya puedes afrontar el problema mejor.
isalpha mira letra por letra, si la palabra es mas corta seguro hay un cero al final de tu frase y por eso te tira error.
Comprueba eso y me lo dices ;)
El cero indica en final de la la palabra y es invisible para nosotros, pero esta ahí y se puede imprimir para verlo.
Leer la parte 5.2 de esta pagina
http://fismat.umich.mx/mn1/manual/node6.html