Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] como sustituir la funcion fgets y gets en c

Estas en el tema de como sustituir la funcion fgets y gets en c en el foro de C/C++ en Foros del Web. hola bueno quisiera saber si me podria ayudar con este programa en c que es para validar si lo que se ingresa son numeros o ...
  #1 (permalink)  
Antiguo 16/02/2014, 15:16
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Pregunta como sustituir la funcion fgets y gets en c

hola

bueno quisiera saber si me podria ayudar con este programa en c que es para validar si lo que se ingresa son numeros o letras y es que uso la funcion fgets(numero, 20, stdin); y solo funciona corectamente el programa si introdusco los 20 caracteres y si uso la funcion gets no me deja compilar gcc espero que me puedan ayudar este es el codigo.

2 ‪#‎include‬ <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <ctype.h>
6
7 int validar_num(char numero[50]);
8 int validar_cadena(char nombre[50]);
9
10 int main (void)
11 {
12 int sw;
13 char numero[50], nombre[50];
14
15 fflush(stdin);
16 printf("ingrese un numero: ");
17 fgets(numero, 50, stdin);
18
19 sw = validar_num(numero);
20 if (sw == 0)
21 {
22 printf("el numero es valido\n");
23 }
24 else
25 {
26 printf("el numero no es valido\n");
27 }
28
29 fflush(stdin);
30 printf("introduce un nombre\n");
31 fgets(nombre, 50, stdin);
32 sw = validar_cadena(nombre);
33 if (sw == 0)
34 {
35 printf("el nombre es correcto\n");
36 }
37 else
38 {
39 printf("el nombre es incorrecto\n");
40 }
41 return 0;
42 }
43
44 int validar_num(char numero[50])
45 {
46 int i = 0 , sw = 0, j ;
j = strlen(numero);
48 while (i<j && sw==0)
49 {
50 if (isdigit(numero[i]) !=0)
51 {
52 i ++;
53 }
54 else
55 {
56 sw = 1;
57 }
58 }
59 return 0;
60 }
61 int validar_cadena(char nombre[50])
62 {
63 int i = 0, sw = 0, j;
64 j = strlen(nombre);
65 while (i<j && sw == 0 )
66 {
67 if (isalpha(nombre[1]) != 0)
68 {
69 i++;
70
71 }
72 else
73 {
74 sw = 1;
75 }
76 }
77 return 0;
78 }

Última edición por Drewermerc; 16/02/2014 a las 15:38
  #2 (permalink)  
Antiguo 16/02/2014, 16:46
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

int isalpha ( int c ); //Compruebe si el carácter es alfabético, retorna un numero positivo si c es una letra del alfabeto, caso contrario retorna cero(falso):http://www.cplusplus.com/reference/cctype/isalpha/

int isdigit ( int c ); //Compruebe si el carácter es el dígito decimal, retorna un numero (verdadero) si es decimal (0,1,2,3,4,5,6,7,8,9) caso contrario retorna 0 (falso):http://www.cplusplus.com/reference/cctype/isdigit/

int isalnum ( int c ); //Compruebe si el carácter es alfanumérico, retorna un numero verdadero si lo es, caso contrario retorna cero (falso):http://www.cplusplus.com/reference/cctype/isalnum/

tienes que hacer el include de #include <ctype.h>
Hay ejemplo en los enlaces que te pase.

Última edición por vangodp; 16/02/2014 a las 17:05
  #3 (permalink)  
Antiguo 16/02/2014, 17:25
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: como sustituir la funcion fgets y gets en c

si eso ya lo ise al igual uso la funciones isdigit y isalpha pero es que es detalle es que cuando ingreso los numero o letras y las capturo con fgets no se cumple la validacion si no pongo los caracteres conpletos especificados en fgets espero que me puedas ayudar y gracias
a por cierto tambien incluyo la libreria ctype.h

Última edición por Drewermerc; 16/02/2014 a las 17:35
  #4 (permalink)  
Antiguo 16/02/2014, 19:38
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

por que usas fgets?
Puedes usar getline(cin, nombre);
:D
  #5 (permalink)  
Antiguo 16/02/2014, 19:43
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: como sustituir la funcion fgets y gets en c

hola vangodp
oye pero no getline es de c++ o tambien se puede usar en c
y es que cuando lo uso me dice esto el compilador


validacion.c:17: aviso: se pasa el argumento 1 de ‘getline’ desde un tipo de puntero incompatible
/usr/include/stdio.h:673: nota: se esperaba ‘char ** __restrict__’ pero el argumento es de tipo ‘char *’
validacion.c:17: aviso: el paso del argumento 2 de ‘getline’ crea un puntero desde un entero sin una conversión
/usr/include/stdio.h:673: nota: se esperaba ‘size_t * __restrict__’ pero el argumento es de tipo ‘int’
validacion.c:17: error: faltan argumentos para la función ‘getline’

o sera que usa mal getline por que la use asi
getline(numero, 20);
  #6 (permalink)  
Antiguo 16/02/2014, 21:22
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

Pero dado que estas usando cosas como i++ que también es de cpp, pensé que no tendrías problemas.
Necesitas poner iostream para que ande.
  #7 (permalink)  
Antiguo 16/02/2014, 22:57
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: como sustituir la funcion fgets y gets en c

getline y variable++, no son de C++, la función getline, la estás usando mal.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ( void )
  5. {
  6.   size_t size_str;
  7.   char *str;
  8.  
  9.   size_str = 20;
  10.   str = NULL;
  11.  
  12.   getline(&str, &size_str, stdin);
  13.  
  14.   printf("str_text: %s", str);
  15.  
  16.   free(str);
  17. }

A getline, no le puedes pasar una variable en la memoria stack, tienes que pasarle un puntero ya que el reservará memoria para lo que esté en stdin, claro, siempre y cuando éste no pase el máximo. El prototipo de la función es

Código C:
Ver original
  1. ssize_t getline(char **lineptr, size_t *n, FILE *stream);

Pero no es para nada necesario que cambies tu fgets, por getline, función, que me parece de paso, algo absurda. Tu problema aquí, son las funciones de validación, siempre estás devolviendo 0.

Saludos
__________________
Si me equivoco, corríjanme sin piedad.
  #8 (permalink)  
Antiguo 17/02/2014, 19:32
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: como sustituir la funcion fgets y gets en c

hola guzzano.
gracias por tu respuesta pero sigo con lo mismo si no introdusco todos los numero que le hacegne a la variable size_t size_str; no me da los resultados correctos y si pongo todos los numeros de la variable size_t size_str; si me da los resultados correctos otra cosa que me pudieras sugerir porfavor y gracias por tu respuesta.
  #9 (permalink)  
Antiguo 17/02/2014, 21:27
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 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
  #10 (permalink)  
Antiguo 17/02/2014, 22:04
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

Código C:
Ver original
  1. //NULL_XRAY.c
  2. #include <stdio.h>
  3.  
  4. void isaNULL(char cadena[100] );
  5. void imprimenulo( char cadena[100] );
  6. void imprimea_asc2( char cadena[100] );
  7. int main(){
  8.     char cadena[100] = "prueba texto";
  9.     isaNULL(cadena);
  10.     printf("Imprimimos como chars, no se veran nulos\n");
  11.     imprimenulo(cadena);
  12.     printf("Imprimimos como caracteres de la tabla asc2 para poder ver los ceros\n");
  13.     imprimea_asc2( cadena );
  14. }
  15.  
  16. void isaNULL(char cadena[100] ){
  17.     int i = 0;  
  18.     while (cadena[i]){
  19.         printf("%c",cadena[i] );
  20.         i++;
  21.         //Esto imprime todas las letas
  22.     }
  23.    
  24.     printf("\nDespues de la ultima letra '%c' hay '%i' segun la tabla asc2 \n\n",cadena[i-1],cadena[i] );
  25.     printf("Si hay un nulo al final y lo imprimes como char no te aparece: '%c'<---Lo ves?\n",cadena[i] );
  26. }
  27.  
  28. void imprimenulo( char cadena[100] ){
  29.     int i = 0;  
  30.     while (i<100){
  31.         printf("cadena[%2d] = '%c'\n",i,cadena[i] );
  32.         i++;
  33.     }
  34. }
  35. void imprimea_asc2( char cadena[100] ){
  36.     int i = 0;  
  37.     while (i<100){
  38.         printf("cadena[%2d] = '%i'\n",i,cadena[i] );
  39.         i++;
  40.     }
  41. }
Este programa te hace de chivato, puedes usar las funciones para ver lo que hay en tu código.
Si hay un cero y estas queriendo validar letras eso puede ser la causa de tu error.
NULL es un carácter no imprimible, puedes ver en la tabla asc2.
Espero que con esto puedas arreglarlo.
Una idea seria validar esos datos por la tabla asc2 ;)
  #11 (permalink)  
Antiguo 17/02/2014, 22:40
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: como sustituir la funcion fgets y gets en c

hola vangod.
oye segun lo que te entendi es que tengo que inicializarlas variables en este caso numero y nombre de mi codigo pero si las inicializo con "NULL o 0" no me deja compilar dise que no es un valor soportado por el tipo de puntero.
si no es asi espero que me pueda ayudar con otra respuesta o a depurar mi codigo aun que ya estoy un poco cansado no se si alomejor no entendi vien pero mañan lo leo de nuevo aber si logro hacerlo funcionar y gracias de nuevo.
  #12 (permalink)  
Antiguo 17/02/2014, 23:56
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

Código C:
Ver original
  1. #include <stdio.h>
  2. void print_char(char cadena[100]);
  3.  
  4. int main(){
  5.     char cadena[100]={'\0'}; //De esta forma limpias el buffer antes de usar
  6.     print_char( cadena );
  7. }
  8.  
  9. void print_char( char cadena[100] ){
  10.     int i = 0;  
  11.     while (i<100){
  12.         printf("cadena[%2d] = '%c'\n",i,cadena[i] );
  13.         i++;
  14.     }
  15. }

Así puedes limpiar el buffer.

Pero lo que te quiero decir es que la funcion isalpha() te retorna un valor verdadero CASO el valor sea a,b,c,d...
de lo contrario te va devolver nulo, y el '\0' no es una letra.
¿Que vas hacer si van mezcladas en este caso?
En todo caso tendrias que saber cuantas letras debes mirar.
Si por ejemplo quieres mirar la palabra "Hola" son solo 4 letras, si miras la 5º letra ahi estara la '\0' que te va tirar error ¿comprendes?

Eso se puede hacer asi:

while ( cadena[i] != '\0' )

Código C:
Ver original
  1. #include <stdio.h>
  2. void print_char(char cadena[100]);
  3.  
  4. int main(){
  5.     char cadena[100]= "hola";
  6.     print_char( cadena );
  7.    
  8. }
  9.  
  10. void print_char( char cadena[100] ){
  11.     int i = 0;
  12.    
  13.     //Mientras no aya NULL hacer las comparaciones necesarias  
  14.     while ( cadena[i] != '\0' ){
  15.         printf("cadena[%2d] = '%c'\n",i,cadena[i] );
  16.         i++;
  17.     }
  18. }

En este caso no hace falta inicializar ya que sabemos que la primera letra después de la palabra sera siempre el dichoso null que dice que no vamos utilizar esos 100 espacios.
Pero recuerda que inicializar una variable es muy buena practica y te puede evitar mas de un dolor de cabeza.
Si tienes problemas imprime las tablas una y otra vez para ver por que tienes problemas.

Aquí te explica como puedes limpiar la memoria antes de usar.
Esta un función muy interesante llamada memset() y un par de sistemas mas ;)
http://funcion-linkgl.blogspot.com.e...e-memoria.html

Última edición por vangodp; 18/02/2014 a las 00:04
  #13 (permalink)  
Antiguo 18/02/2014, 08:34
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 10 meses
Puntos: 49
Respuesta: como sustituir la funcion fgets y gets en c

El origen del problema radica en que fgets introduce un '\n' al final de la cadena, por lo que has de tomar la longitud menos el retorno.

Funcionando:

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6.  int validar_num(char numero[50]);
  7.  int validar_cadena(char nombre[50]);
  8.  
  9. int main (void)
  10. {
  11.   char numero[50], nombre[50];
  12.   int sw;
  13.   printf("ingrese un numero: ");
  14.   fgets(numero, 50, stdin);
  15.   sw = validar_num(numero);
  16.   if (sw == 0)
  17.     printf("el numero es valido\n");
  18.   else
  19.     printf("el numero no es valido\n");
  20.   printf("introduce un nombre\n");
  21.   fgets(nombre, 50, stdin);
  22.   sw = validar_cadena(nombre);
  23.   if (sw == 0)
  24.   printf("el nombre es correcto\n");
  25.   else
  26.     printf("el nombre es incorrecto\n");
  27.  return 0;
  28.  }
  29.  
  30.  int validar_num(char numero[50])
  31.  {
  32.  int i = 0 ;
  33.  for (i=0;i<strlen(numero)-1;i++)
  34.    if (isdigit(numero[i]) ==0)
  35.     return 1;
  36.  return 0;
  37.  }
  38.  
  39. int validar_cadena(char nombre[50])
  40.  {
  41.    int i = 0;
  42.    for (i=0;i<strlen(nombre)-1;i++)
  43.      if (isalpha(nombre[i]) == 0)
  44.         return 1;
  45.    return 0;
  46.  }

Por cierto, a ver si nos acostumbramos indentar o sangrar o tabular los códigos si no se hacen ilegibles.

Y otra cosita, cuando un for, else o similar se reduce a una sola instrucción, no hace falta ponerles llaves, así no recargas el código.

Te he cambiado los while por for porque en este caso me parece más razonable conociendo el valor inicial y final.
  #14 (permalink)  
Antiguo 18/02/2014, 09:12
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

Bien señalado :D
El fgets guarda la el enter también ¿no? O sea (\n) que tampoco es alpha.
Pues hay que parar antes o seguro te va decir que no es una letra ni creo tampoco un numero.
Bug asegurado ><.
  #15 (permalink)  
Antiguo 18/02/2014, 09:48
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: como sustituir la funcion fgets y gets en c

gracias vangod por la informacion y tu consejo de iniciar variables lo tomare en cuenta gracias por responder.

gracias leosansan por la explicacion de \n no sabia que tan bien lo guardaba fgets y gracias por los consejos los pondre en practica y por corregir mi codigo gracias de nuevo.
  #16 (permalink)  
Antiguo 18/02/2014, 12:05
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: como sustituir la funcion fgets y gets en c

Cita:
Iniciado por Drewermerc Ver Mensaje
gracias vangod por la informacion y tu consejo de iniciar variables lo tomare en cuenta gracias por responder.

gracias leosansan por la explicacion de \n no sabia que tan bien lo guardaba fgets y gracias por los consejos los pondre en practica y por corregir mi codigo gracias de nuevo.
Cómo simple duda, cuando te referías a "no me da los resultados correctos", a qué te referías

Saludos.
__________________
Si me equivoco, corríjanme sin piedad.
  #17 (permalink)  
Antiguo 18/02/2014, 13:34
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

Mi pregunta es... ¿Guarda '\n', las funciones scanf() getline() y otras funciones al pulsar enter, o solo fgets lo hace?
  #18 (permalink)  
Antiguo 18/02/2014, 16:37
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 10 meses
Puntos: 49
Respuesta: como sustituir la funcion fgets y gets en c

Cita:
Iniciado por vangodp Ver Mensaje
Mi pregunta es... ¿Guarda '\n', las funciones scanf() getline() y otras funciones al pulsar enter, o solo fgets lo hace?
Sólo fgets, que yo sepa con seguridad, pero la gracia, por llamarlo de alguna manera, es que forma parte de la cadena. No es como en el scanf que se queda en ocasiones en el buffer y con limpiarlo basta.
  #19 (permalink)  
Antiguo 18/02/2014, 17:51
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: como sustituir la funcion fgets y gets en c

¿Y eso que quiere decir?¿Que si lo imprimo hace el salto de linea automatico?
  #20 (permalink)  
Antiguo 18/02/2014, 22:54
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: como sustituir la funcion fgets y gets en c

hola guzzano.
bueno mira cuando dije que no me daba los resultados correctos es por que cuando yo pedia introducir los numeros y ponia letras me decia que estaba correcto y al igual que cuando pedia letras e introducia numeros pro eso decia que no me daba los resultados correctos.

hola vangodp
y si haci es si imprimes la variable de fgets si da el salto de linea pero tambien andube investigando y si quieres usar fgets en lugar de scanf gets etc.. esto del salto de linea lo puedes solucionar con la funcion strchr asi que pues eso no presenta mucho problema por que tambien lo puedes arreglar bueno asi lo veo yo y bueno aqi les dejo un link de como funciona la fncion por si lo nesesitan.
http://c.conclase.net/librerias/?ansifun=strchr

un ejemplo aqui

Código C:
Ver original
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4.  
  5. int main (void)
  6. {
  7.      struct pp  {
  8.            char genero[50];
  9.       };  
  10.     struct pp temporal;
  11.     char *pch;
  12.     printf("texto\n");
  13.     fgets(temporal.genero, 50, stdin);
  14.     pch = strchr(temporal.genero, 10);
  15.    
  16.     if (pch != NULL)
  17.          *pch = '\0';
  18.  
  19.    printf("%s", temporal.genero);
  20.    return 0;
  21. }

bueno no se si me podrian explicar no entendi todo el codigo , tambien no se si estoy bien pero eso de unir con un punto dos variables sellama concatenar, y es que tambien nose que es eso de struc segun yo eso es codigo de c++ y si no es asi corrijanme porfavor.

gracias a todos por sus respuestas me sirvieron mucho
  #21 (permalink)  
Antiguo 20/02/2014, 02:31
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: como sustituir la funcion fgets y gets en c

Si te referías a eso, la cuestión no estaba, si tu línea tenía un salto de línea o no. Es cuestión como te dije arriba, que tus variables devuelven siempre 0. Mira tus líneas 56 y 74. Que tengas una variable definida en main y otra en tu función con el mismo nombre, no quiere decir que cambiará la de main. Claramente puedes, pero ya seria con el uso de punteros.

El código de arriba, la estructura creada, no sé que hace ahí, es patética y inservible. Puedes hacerlo con una simple variable. Aquí te adjunto una explicación.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int
  5. main (void)
  6. {
  7.   char str[256];
  8.   char *strp;
  9.  
  10.   fgets(str, sizeof str, stdin);
  11.  
  12.   /* La función strchr, busca la
  13.    * primera aparición cáracter
  14.    * que se le pasó. En tu caso,
  15.    * pasaste 10, que seria \n
  16.    * según la tabla ASCII.
  17.    *
  18.    * Esta función, devolverá un
  19.    * puntero, que tendrá la
  20.    * dirección donde se encontró.
  21.    * Si no se encontró, devolverá
  22.    * un valor NULO.
  23.   */
  24.  
  25.   if (strp = strchr(str, '\n'))
  26.     *strp = '\0';
  27.  
  28.   /* Esta condición, mira si el
  29.    * resultado no es NULO, y
  30.    * con al asterisco accederemos
  31.    * a la dirección y cambiaremos
  32.    * su valor a un \0, que es un
  33.    * fin de la cadena.
  34.   */
  35.  
  36.   puts(str);
  37.  
  38.   return 0;
  39. }

Saludos.
__________________
Si me equivoco, corríjanme sin piedad.
  #22 (permalink)  
Antiguo 20/02/2014, 08:53
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: como sustituir la funcion fgets y gets en c

hola guazzano.
gracias por tu respuesta ya me quedo mas claro claro con tu explicacion, y cierto ya noo recordaba que para trabar con variables iguales y en main como en funciones se debe trabajar con punteros pero gracias por tu respuesta mcuhas gracias

Etiquetas: fgets, funcion, int, numero, programa, string, sustituir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:34.