gpt4 book ai didi

c - 将数据存储在数组中

转载 作者:行者123 更新时间:2023-11-30 20:23:30 25 4
gpt4 key购买 nike

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

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

这里是代码。

#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

最佳答案

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

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);因为前一个语句调用未定义的行为将指向类型错误的数据的指针传递给 scanf() :%s说明符要求 char* ,但你通过了char (*)[30] .

关于c - 将数据存储在数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35966647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com