¿Porque después de leer un float en un struct termina el programa?

En este código lo que hago es llamar al saldecuenta flotante, pero me manda directo al final del programa y ya no me deja escribir el numero.¿Cuál podría ser la causa?

#include <stdio.h>

struct cliente{

 int numdecuenta;

 char nombre;

 float saldecuenta;

};

int main()

{

 struct cliente a1,a2; //se declaran variable alumno

 printf("\nDame el numero de cuenta del cliente 1: ");

 scanf("%d",&a1.numdecuenta);

 printf("\nDame el nombre del cliente 1: ");

 scanf("%d",&a1.nombre);

 printf("\nDame el saldo del cliente 1: ");

 scanf("%f",&a1.saldecuenta);

 printf("\nDame el numero de cuenta del cliente 2: ");

 scanf("%d",a2.numdecuenta);

 printf("\nDame el nombre del cliente 2: ");

 scanf("%d",&a2.nombre);

 printf("\nDame el saldo del cliente 2: ");

 scanf("%d",a2.saldecuenta);

 return 0;

}

Attachment image

2 respuestas

Calificación
  • Anónimo
    hace 4 meses

    1. El miembro "nombre" en la estructura fue declarado como un carácter y no una cadena de caracteres, por lo que solo se almacenará un elemento. 

    2. Hay varios scanf que leen los miembros de la estructura con otro tipo de dato (ejemplo, leer una variable de tipo char como tipo int).

    3. Omitiste el operador de dirección "&" en varios scanf.

    Corrigiendo los errores anteriores, el programa quedaría así:

    #include <stdio.h>

    struct cliente{

     int numdecuenta;

     char nombre[30];

     float saldecuenta;

    };

    int main()

    {

     struct cliente a1,a2; //se declaran variable alumno

     printf("\nDame el numero de cuenta del cliente 1: ");

     scanf("%d",&a1.numdecuenta);

     printf("\nDame el nombre del cliente 1: ");

     scanf("%s",a1.nombre);

     printf("\nDame el saldo del cliente 1: ");

     scanf("%f",&a1.saldecuenta);

     printf("\nDame el numero de cuenta del cliente 2: ");

     scanf("%d",&a2.numdecuenta);

     printf("\nDame el nombre del cliente 2: ");

     scanf("%s",a2.nombre);

     printf("\nDame el saldo del cliente 2: ");

     scanf("%f",&a2.saldecuenta);

     return 0;

    }

    Nota: En C no es necesario usar el operador de dirección "&" cuando se lee una cadena de carácteres con scanf porque la cadena ya contiene la dirección de memoria del primer elemento, por lo que ya se sabrá donde empezará a escribir los valores de la cadena.

  • hace 5 meses

    Lo descubrí porque no concuerda con las demás:

     scanf("%d",a2.saldecuenta);

    según lo que veo a las demás les colocas "&"

     scanf("%d",&a2.saldecuenta);

¿Aún tienes preguntas? Pregunta ahora para obtener respuestas.