首页 新闻 搜索 专区 学院

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

0
[已解决问题] 解决于 2020-07-15 17:28
复制代码
 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 }
复制代码
墨梅渐盛的主页 墨梅渐盛 | 初学一级 | 园豆:104
提问于:2020-07-08 22:25
< >
分享
最佳答案
0

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

奖励园豆:5
Conan-jine | 小虾三级 |园豆:1272 | 2020-07-08 23:17

这也就意味着,你选择的编译软件不对,并不能说你的代码是错的,对于Dev编译器报错,我找到了相关的解释,请看文章->https://www.cnblogs.com/heartchord/p/4797723.html
请务必看完,里面有C与C++的区别

Conan-jine | 园豆:1272 (小虾三级) | 2020-07-09 09:04

而我换了一个编译软件,换成了支持C语言又支持C++的Clion,新建了一个关于C的编译环境就可以成功编译你的代码了

Conan-jine | 园豆:1272 (小虾三级) | 2020-07-09 09:06

这是具体编译运行结果

Conan-jine | 园豆:1272 (小虾三级) | 2020-07-09 09:14

@Conan-jine: 谢谢前辈,有些问题,我发你消息了。

墨梅渐盛 | 园豆:104 (初学一级) | 2020-07-15 19:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册