将数据存储在数组中

时间:2016-03-13 04:53:39

标签: c arrays struct

在结构中存储数据时遇到问题,当我保存名称时,所有名称都设置为最后一个。

我有一整天的时间试图找到错误。

这里的代码。

#include <stdio.h>

typedef struct {
    int id;
    char *nombre;
    int saldo;
} CLIENTES;

CLIENTES Cliente[5];
int n_client = 0;
void RegistrarCliente (char *nom, int saldo);
void Listar ();
int n_client;

void main (void)
{
    for (int i = 0; i < 5; i++) {
        char nombre[30];
        scanf ("%s", &nombre);
        RegistrarCliente (nombre, 250);
    }
    Listar ();
}

void RegistrarCliente (char *nom, int saldo)
{
    Cliente[n_client].id = n_client;
    Cliente[n_client].nombre = nom;
    Cliente[n_client].saldo = saldo;
    printf ("Cliente: %s registrado con una deuda de %d\n",
            Cliente[n_client].nombre, Cliente[n_client].saldo);
    n_client++;
}

void Listar ()
{
    printf ("%-10s%-13s%-10s\n", "ID", "NOMBRE", "SALDO");
    for (int i = 0; i < n_client; i++) {
        printf ("%-10d%-13s%-10d\n", Cliente[i].id, Cliente[i].nombre,
                Cliente[i].saldo);

    }
}

输入/输出

Jhosh
    Cliente: Jhosh registrado con una deuda de 250
    Leo
    Cliente: Leo registrado con una deuda de 250
    Jhonny
    Cliente: Jhonny registrado con una deuda de 250
    Stweart
    Cliente: Stweart registrado con una deuda de 250
    Carlos
    Cliente: Carlos registrado con una deuda de 250
    ID        NOMBRE       SALDO
    0         Carlos       250
    1         Carlos       250
    2         Carlos       250
    3         Carlos       250
    4         Carlos       250

2 个答案:

答案 0 :(得分:1)

您必须复制字符串,而不是直接指定指针。

void RegistrarCliente(char * nom, int saldo)
{
    Cliente[n_client].nombre = malloc(strlen(nom) + 1); /* +1 for terminating null-character */
    if(Cliente[n_client].nombre == NULL)
    {
        perror("malloc");
        return;
    }
    Cliente[n_client].id = n_client;
    strcpy(Cliente[n_client].nombre, nom);
    Cliente[n_client].saldo = saldo;
    printf("Cliente: %s registrado con una deuda de %d\n", Cliente[n_client].nombre, Cliente[n_client].saldo);
    n_client++;
}

请添加#include <stdlib.h>以使用malloc()#include <string.h>,以便使用strlen()strcpy()

正如@ R.Shrestha指出的那样,您必须将scanf("%s", &nombre);更改为scanf("%s", nombre);,因为前一个语句调用未定义的行为,用于将指向错误类型的数据的指针传递给{ {1}}:scanf()说明符要求%s,但您通过了char*

答案 1 :(得分:0)

更改此语句scanf(“%s”,&amp; nombre); to scanf(“%s”,nombre); //它是字符串和'&amp;'的输入不应该在这里使用并使用strcpy()来复制字符串而不是使用赋值运算符...试试这个

相关问题