【问题标题】:Error initializing array of struct element初始化结构元素数组时出错
【发布时间】:2018-12-19 15:14:49
【问题描述】:

下午好,对于一个学校项目,我必须输入并显示客户 30 天(1 个月)的锻炼分钟数,客户是一个包含天数数组的结构,当我初始化我的程序时,我会初始化我的客户向量使用:

//Struct
typedef struct{
char name[100];
int dayOfBirth;
int monthOfBirth;
int yearOfBirth;
char address[100];
int phone;
int iRSNumber;
float height;
float weight;
int exerMinutes[30];

}client;

client clients[100] = {};


//initialize struct of clients
for(int i=0; i<100; i++){
    strcpy(clients[i].name, "NULL");
    strcpy(clients[i].address, "NULL");
    clients[i].height = 0.0;
    clients[i].yearOfBirth = 0;
    clients[i].monthOfBirth = 0;
    clients[i].dayOfBirth = 0;
    clients[i].iRSNumber = 0;
    clients[i].weight = 0.0;
    clients[i].phone = 0;
    for(int j = 0; j<30; j++){
        clients[i].exerMinutes[j] = 0;
    }
}

显示报告的代码:

system("cls");
printf("\nSHOW MONTHLY REPORT\n");
for(int i=0;i<30;i++){
    if((i+1)%2==0 && i!=0){
        printf("day %2d: %3d min\n", i+1, Client->exerMinutes[i]);
    }else{
        printf("day %2d: %3d min\t\t", i+1, Client->exerMinutes[i]);
    }
}

printf("\n\nPress Enter to continue");
system("pause >nul /nobreak");

但是初始化月份数组的 for() 循环似乎不起作用,因为当我要求月份报告时,这是输出:

day  1: 100 min         day  2:   0 min
day  3:   0 min         day  4:   0 min
day  5:   0 min         day  6:   0 min
day  7:   0 min         day  8:   0 min
day  9:   0 min         day 10:   0 min
day 11:   0 min         day 12:   0 min
day 13:   0 min         day 14:   0 min
day 15:   0 min         day 16:   0 min
day 17:   0 min         day 18:   0 min
day 19:   0 min         day 20:   0 min
day 21:   0 min         day 22:   0 min
day 23:   0 min         day 24:   0 min
day 25:  10 min         day 26:   3 min
day 27: 1999 min                day 28: 1280070990 min
day 29:   0 min         day 30:   0 min

感谢您提供的任何帮助和/或建议。

【问题讨论】:

  • 你应该提供结构定义。
  • 编译时出现警告:warning: ISO C forbids empty initializer braces,切换到client clients[100] = {{0}};
  • 除了你的结构体定义,还请给我们展示打印数据的代码。
  • @Cid 当您将其声明为int a[30] 之类的数组时,无需使用malloc
  • 我在这段代码中找不到错误。请尝试创建一个minimal reproducible example。另外:How to debug small programs

标签: c arrays for-loop struct initialization


【解决方案1】:

代码运行良好,即“结构”中的所有变量都按预期用零或任何值初始化。我尝试了一些更改。

问题在于这些行:

if((i+1)%2==0    &&    i!=0){
        printf("day    %2d:    %3d    min\n",    i+1,    Client->exerMinutes[i]);
}else{
        printf("day    %2d:    %3d    min\t\t",    i+1,    Client->exerMinutes[i]);
}

您使用了指向结构“客户端”的指针,但它没有初始化,这就是您得到意外结果的原因。请记住,在此“客户端”中,您使用了大写字母“C”。希望这会有所帮助:)

【讨论】:

  • 感谢您的回答,我意识到我无法使用客户端本身,所以我选择发送完整的客户端数组和客户端想要的位置,以便我可以修改该位置数组本身,而不是修改客户端的实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多