C结构体数组三种方式赋值问题

2020-07-15 17:11发布

复制代码
 1 #include <stdio.h> 
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #define LEN 20
 5 #define COUNT    2
 6 #define NUM_LEN 10
 7 
 8 struct name
 9 {
10     char Fname[LEN];
11     char Mname[LEN];
12     char Lastname[LEN];
13 
14 };
15 
16 struct insurrance 
17 {
18     char num_insur[NUM_LEN];
19     struct name names;
20 };
21 
22 void input1(int count, struct insurrance arr_insur[]);
23 void input2(int count, struct insurrance *pinsur);
24 
25 int main(void)
26 {
27     
28     struct insurrance arr_insur[COUNT] = 
29     {
30         {
31             //第一种:不可以 
32             .num_insur = "12345678",
33             {"sheng", "M.", "shuai"} 
34             
35             //第二种不可以 
36 //            .names.Fname = "sheng",
37 //            .names.Mname = "M.",
38 //            .names.Lastname = "shuai"
39         },
40         {
41             .num_insur = "12345678",
42             .names = {"shi", "T.", "long"} 
43 //            .Fname = "shi",
44 //////            .Mname = "",
45 //            .Lastname = "long"
46         }
47     };
48 
49     //第三种可以 
50 //    struct insurrance arr_insur[COUNT];
51     
52 //    strcpy(arr_insur[0].num_insur, "123456789");
53 //    strcpy(arr_insur[0].names.Fname, "sheng");
54 //    strcpy(arr_insur[0].names.Lastname, "shuai");
55 //    strcpy(arr_insur[0].names.Mname, "S");
56 //    
57 //    strcpy(arr_insur[1].num_insur, "123456789");
58 //    strcpy(arr_insur[1].names.Fname, "shi");
59 //    strcpy(arr_insur[1].names.Lastname, "long");
60 //    strcpy(arr_insur[1].names.Mname, "S");
61     
62 //    printf("%s", arr_insur[1].names.Mname);
63     input1(COUNT, arr_insur);
64     input2(COUNT, arr_insur);
65     
66     return 0;
67 }
68 
69 void input2(int count, struct insurrance *pinsur)
70 {
71     int i;
72     for(i = 0; i < count; i++)
73     {
74         if(strcmp((pinsur+i)->names.Mname, "") > 0)
75         {
76             printf("%s,%s %s. -- %s\n", (pinsur+i)->names.Fname, (pinsur+i)->names.Lastname, (pinsur+i)->names.Mname, (pinsur+i)->num_insur);
77         }else
78         {
79             printf("%s,%s -- %s\n", (pinsur+i)->names.Fname, (pinsur+i)->names.Lastname, (pinsur+i)->num_insur);
80         }
81     }
82 }
83 
84 void input1(int count, struct insurrance arr_insur[])
85 {
86     int i;
87     for(i = 0; i < count; i++)
88     {
89         if(strcmp(arr_insur[i].names.Mname, "") > 0)
90         {
91             printf("%s,%s %s. -- %s\n", arr_insur[i].names.Fname, arr_insur[i].names.Lastname, arr_insur[i].names.Mname,arr_insur[i].num_insur);
92         }else
93         {
94             printf("%s,%s -- %s\n", arr_insur[i].names.Fname, arr_insur[i].names.Lastname, arr_insur[i].num_insur);
95         }
96     }
97 }
复制代码

1条回答
Melony?
2楼-- · 2020-07-15 17:16

噢!问题找到了,问题出在编译软件上,Dev-C++,一看名字就是对C++进行的编译,而C与C++在某些细节上是有区别的。
你的那本应该是关于C的书吧,里面没有讲到C与C++在结构体复制上的区别。
你的编译软件Dev-C++是可以编译C,也可以编译C++文件,一个后缀是.c另一个后缀是.cpp,但主要是编译C++,一看软件的名字就知道了
当我使用Dev对.c文件进行编译的时候,报错更多了

查看更多
登录 后发表回答