Memoria dinámica en C introducir cadena de texto

publicado por: Anonymous

Estoy intentando que el siguiente programa me almacene mediante memoria dinámica y luego me muestre los diferentes elementos introducidos por teclado.
El problema es que mediante %s no funciona y mediante %c solo muestra el primer carácter de la cadena de texto.

#include <stdio.h>
#include <stdlib.h>

typedef struct cliente{
    char dni;
    char nombre;
    char apellido;
}cliente_t;

cliente_t* crear_cliente(){

    cliente_t* nuevo_cliente = malloc(sizeof(cliente_t));
    if(!nuevo_cliente)printf("Error");

    //asignamos los valores
    fflush(stdin);
    printf("Introduce el dni:t");
    scanf("%s", &nuevo_cliente->dni);

    fflush(stdin);
    printf("Introduce el nombre:t");
    scanf("%s", &nuevo_cliente->nombre);

    fflush(stdin);
    printf("Introduce el apellido:t");
    scanf("%s", &nuevo_cliente->apellido);

    return nuevo_cliente;

}


void imprimir_cliente(cliente_t* cliente_impreso){
    printf("DNI: %sn Nombre: %sn Apellido: %sn", cliente_impreso->dni, cliente_impreso->nombre, cliente_impreso->apellido);


}

int main()
{
    cliente_t* cliente1 = crear_cliente();
    imprimir_cliente(cliente1);
    return 0;
}

solución

Tendrás que declarar los campos dni, nombre y apellido como vectores de char con el tamaño máximo que quieras permitir:

#define TAM_MAX 80
typedef struct cliente{
    char dni[TAM_MAX];
    char nombre[TAM_MAX];
    char apellido[TAM_MAX];
} cliente_t;

Y luego cuando vayas a hacer el scanf:

scanf("%79s", &nuevo_cliente->dni);
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *