1

quería ver si me podrían ayudar en este error que no logro encontrar, lo que sucede es que cree un algoritmo que te pide ingresar los datos de dos usuarios (nombre de usuario, correo y una frase de perfil, por ahora no lo tengo con validaciones) funciona bien al momento de ingresar los datos, pero al momento de querer mostrar los datos ingresados previamente no muestra nada (bueno muestra lo siguiente: Segmentation fault (core dumped)), podrian mostrarme en que me estoy equivocando, muchas gracias.

#include <stdio.h>

/*Datos de los usuarios*/
typedef struct usuario{
    char nombre_usuario[20];
    char email[20];
    char frase_perfil[150];
}u;

/*Guardaremos la cantidad de usuarios en una estructura general, por
si se desea moficar la cantidad de usuarios*/
typedef struct aplicacion{
    u user[2];
}app;

/*Variables globales utilizadas*/
app x;
u user;
int i;

/*Funciones utilizadas*/
void cantidad_usuarios();
u datos_usuario();
void mostrar_usarios();

int main(){
    
    cantidad_usuarios();/*Ingresamos la cantidad y datos de los usuarios*/
    mostrar_usarios();/*Mostramos los datos*/
}
void cantidad_usuarios(){
    for(i=0;i<2;i++){
        
        printf("Ingrese el usuario (%d/2): ",i);
        x.user[i] = datos_usuario();/*Llenamos los datos llamando a la funcion de llenado*/
        printf("\n\n");
    }
    
}
/*Llenamos la informacion de los usarios*/
u datos_usuario(){
    printf("\n");
    printf("Ingrese su nombre de usuario: ");
    gets(user.nombre_usuario);
    printf("Ingrese su correo electronico: ");
    gets(user.email);
    printf("Ingrese una frase del perfil (150c/m): ");
    gets(user.frase_perfil);
}
/*Funcion para mostrar los datos (AQUI SE ENCUENTRA EL ERROR, POR LO QUE TENGO ENTENDIDO)*/
void mostrar_usarios(){
    for(i=0;i<2;i++){
        
        printf(":: USUARIO(%d/2) ::",i);
        printf("\n");
        printf("Nombre de usuario: %s\n",x.user[i].nombre_usuario[i]);
        printf("Correo electronico: %s\n",x.user[i].email[i]);
        printf("Frase: %s\n",x.user[i].frase_perfil[i]);
        printf("\n\n");
    }
}
  • No uses la función `gets`, está obsoleta y es peligrosa, ya que hay la posibilidad que ocurra un desbordamiento de búfer. Por cuestión de seguridad, deberías de usar la función [fgets](http://www.cplusplus.com/reference/cstdio/fgets/) para pedir cadenas por teclado. – MrDave1999 Aug 05 '20 at 20:39

2 Answers2

1

Mira nunca asignas el valor solo tienes que retornarlo

u datos_usuario(){
u aux;
printf("\n");
printf("Ingrese su nombre de usuario: ");
gets(aux.nombre_usuario);
printf("Ingrese su correo electronico: ");
gets(aux.email);
printf("Ingrese una frase del perfil (150c/m): ");
gets(aux.frase_perfil);
return aux;

} y al imprimir intenta esto

void mostrar_usarios(){
for(i=0;i<2;i++){
    
    printf(":: USUARIO(%d/2) ::",i);
    printf("\n");
    printf("Nombre de usuario: %s\n",x.user[i].nombre_usuario);
    printf("Correo electronico: %s\n",x.user[i].email);
    printf("Frase: %s\n",x.user[i].frase_perfil);
    printf("\n\n");
}

} Saludos

0

Lo que pasa es que estas accediendo al caracter i de los arrays de caracteres, y le estas pidiendo que lo imprima como un array de caracteres. Si ves los avisos del compilador te informan de esto.

Si tienes que acceder a ellos de la siguiente manera

void mostrar_usarios(){
    for(i=0;i<2;i++){
        
        printf(":: USUARIO(%d/2) ::",i);
        printf("\n");
        printf("Nombre de usuario: %s\n",x.user[i].nombre_usuario);
        printf("Correo electronico: %s\n",x.user[i].email);
        printf("Frase: %s\n",x.user[i].frase_perfil);
        printf("\n\n");
    }
}

Ahora, se que esto no esta en tu pregunta, pero hay otro bug en tu codigo:

/*Llenamas la info del usuario pero jamas lo devuelbes*/
u datos_usuario(){
    printf("\n");
    printf("Ingrese su nombre de usuario: ");
    gets(user.nombre_usuario);
    printf("Ingrese su correo electronico: ");
    gets(user.email);
    printf("Ingrese una frase del perfil (150c/m): ");
    gets(user.frase_perfil);
}

void cantidad_usuarios(){
    for(i=0;i<2;i++){
        
        printf("Ingrese el usuario (%d/2): ",i);
        x.user[i] = datos_usuario();/*Entonces aquí el usuario no va a tener nada*/
        printf("\n\n");
    }
    
}

Espero que te sea de ayuda. Te recomiendo esta otra pregunta que habla sobre las variables globales. No es por molestarte, sino que es para ahorrarte dolores de cabeza mas adelante

Pablochaches
  • 2,505
  • 1
  • 5
  • 21