Autor
|
Tema: Duda con fgets (Leído 3,087 veces)
|
dalberto9410
Desconectado
Mensajes: 10
|
Hola, aquí yo de nuevo xD ayer puse una duda que tenia y se resolvia usando fgets allí todo bien pero he estado probando y cuando uso fgets se salta una linea #include<stdio.h> typedef struct fecha{int dia;int mes;int anio; }d_t; typedef struct contacto{char nombre[80];unsigned int tel; d_t fecha_nacimiento; }c_t;
d_t crear_fecha(){ d_t nueva_fecha; printf("\nIngrese el dia: "); scanf("%d",&nueva_fecha.dia); while(getchar()!='\n'); printf("\nIngrese mes: "); scanf("%d",&nueva_fecha.mes); while(getchar()!='\n'); printf("\nIngrese año:" ); scanf("%d",&nueva_fecha.anio); while(getchar()!='\n'); return nueva_fecha; }
c_t crear_contacto(){ c_t nuevo_contacto; printf("\nIngrese nombre: "); fgets(nuevo_contacto.nombre,80,stdin); //scanf("%[^\n]s",nuevo_contacto.nombre); printf("\nIngrese telefono: "); scanf("%d",&nuevo_contacto.tel); //asignar fecha de nacimiento nuevo_contacto.fecha_nacimiento=crear_fecha(); return nuevo_contacto; }
c_t imprimir(){
} int main (void){ c_t c1; c1=crear_contacto(); imprimir(c1);
printf("Nombre: %s, Telefono %d, Fecha Nacimiento: %d/%d/%d", c1.nombre,c1.tel,c1.fecha_nacimiento.dia,c1.fecha_nacimiento.mes,c1.fecha_nacimiento.anio);
return 0; }
Aca el resultado de la salida Ojo que con scanf no ocurre eso pero quisiera hacerlo con fgets :/ Gracias de antemano!! Saludos.
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Lo que indicas es normal ya que fgets lee y almacena una linea de texto incluyendo el avance de linea. Si no quieres el '\n' debes eliminarlo manualmente mediante un bucle o utilizando la función strchr (prototipo en <string.h>), como hacerlo con esta ultima: #include <string.h> /* ... */ c_t crear_contacto() { c_t nuevo; char *p; fgets(nuevo. nombre, 80, stdin ); if ((p = strchr(nuevo. nombre, '\n')) != NULL ) *p = '\0'; puts("Ingrese telefono:"); nuevo.fecha_nacimiento = crear_fecha(); return nuevo; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
dalberto9410
Desconectado
Mensajes: 10
|
Ya probé el codigo que me diste y lo entendi según lo poco que sé,creo que allí lo que estas haciendo es crear una variable p que es un puntero y coje la direccion donde encuentre un salto de linea y lo remplace por '\0' no? Ah y otra cosa como es el funcionamiento de puts? me podrías explicar D: Graax por responder
|
|
« Última modificación: 27 Marzo 2013, 06:49 am por dalberto9410 »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
creo que allí lo que estas haciendo es crear una variable p que es un puntero y coje la direccion donde encuentre un salto de linea y lo remplace por '\0' no? Correcto. Utilizamos strchr para buscar el '\n' en la cadena y almacenamos su resultado en la variable "p". Si es NULL significa que no se encontró, si es distinto entonces esa es la dirección en la cadena donde se almacena el carácter. En este punto basta con utilizar "*p = '\0'" para sobrescribir el '\n' con un '\0'. Ah y otra cosa como es el funcionamiento de puts? Es una función simple, imprime la cadena pasada como argumento y a continuación imprime un avance de linea. Por ejemplo en lugar de:
Podemos utilizar con el mismo efecto (nos ahorramos el '\n'):
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
dalberto9410
Desconectado
Mensajes: 10
|
Gracias rir3760 no sabia que existia "Puts" yo siempre usaba salto de línea '\n' .... joder con esto me ahorro mucho xD
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con fgets [Solucionado]
Programación C/C++
|
Søra
|
0
|
2,048
|
22 Mayo 2010, 12:15 pm
por Søra
|
|
|
Duda con buffer utilizado para leer con fgets()
Programación C/C++
|
Gabilan81
|
1
|
2,739
|
25 Septiembre 2010, 22:48 pm
por Ca0s
|
|
|
Problema con fgets
Programación C/C++
|
P.AGCD
|
3
|
3,889
|
14 Julio 2011, 20:41 pm
por kiriost
|
|
|
No me reconoce función fgets
Desarrollo Web
|
..:ALT3RD:..
|
4
|
2,897
|
23 Agosto 2013, 19:25 pm
por ..:ALT3RD:..
|
|
|
Duda sobre fgets() en c
Programación C/C++
|
lgamerm
|
8
|
5,433
|
26 Octubre 2016, 06:34 am
por lgamerm
|
|