C 如何快速用值填充结构?
我正在使用Visual Studio 2013和标准C 我的程序需要四行代码C 如何快速用值填充结构?,c,arrays,structure,C,Arrays,Structure,我正在使用Visual Studio 2013和标准C 我的程序需要四行代码 {Analysis 1”,“AN 1”,0,0.0667}inFach[0] 我不想浪费这么多行来填充这个数组 有没有更好的办法把这四行合并成一行 #define _CRT_SECURE_NO_WARNINGS #include "header.h" #include <stdio.h> #include <string.h> struct sFach { char Mod[40];
{Analysis 1”,“AN 1”,0,0.0667}
inFach[0]
我不想浪费这么多行来填充这个数组
有没有更好的办法把这四行合并成一行
#define _CRT_SECURE_NO_WARNINGS
#include "header.h"
#include <stdio.h>
#include <string.h>
struct sFach
{
char Mod[40]; //Modulbezeichnung
char Ab[5]; //Abkürtzung
int Note; //Note
double Gew; //Gewichtungsfaktor
};
int main()
{
struct sFach Fach[31];
strcpy(Fach[0].Mod, "Analysis 1");
strcpy(Fach[0].Ab, "AN 1");
Fach[0].Note = 0;
Fach[0].Gew = 0.0667;
strcpy(Fach[1].Mod, "Algebra");
strcpy(Fach[1].Ab, "AL");
Fach[1].Note = 0;
Fach[1].Gew = 0.0889;
return 0;
}
\define\u CRT\u SECURE\u NO\u警告
#包括“header.h”
#包括
#包括
结构sFach
{
char Mod[40];//modulebezeichung
char Ab[5];//Abkürtzung
int Note;//Note
双Gew;//Gewichtungsfaktor
};
int main()
{
struct sFach Fach[31];
strcpy(Fach[0].Mod,“分析1”);
strcpy(Fach[0].Ab,“AN 1”);
Fach[0]。注=0;
Fach[0].Gew=0.0667;
strcpy(Fach[1].Mod,“代数”);
strcpy(Fach[1].Ab,“AL”);
Fach[1]。注=0;
Fach[1].Gew=0.0889;
返回0;
}
在C99中,您有指定的初始值设定项,也有复合初始值设定项(但我不记得它们是扩展还是标准支持):
在C99中,您有指定的初始值设定项,也有复合初始值设定项(但我不记得它们是扩展还是受标准支持): 使用最新的(C11兼容)编译器,您可以尝试:
Fach[0] = (struct sFach){"Analysis 1","AN 1",0,0.667};
等下一个条目
(优化编译器将使代码非常高效)
另一种可能是编写一些脚本(例如,在Python中,等等),它将解析一些数据文件,并(从该数据文件)生成一些initialize\u Fach.inc
文件,其中包含上述行,只需在C代码中添加,包括“initialize\u Gach.inc”
。当然,您需要修改构建过程(例如,改进Makefile
或某些Microsoft.vproj
东西)
不要忘记,C代码,特别是用于初始化的C代码,可以由其他代码生成。使用最新的(符合C11的)编译器,您可以尝试:
Fach[0] = (struct sFach){"Analysis 1","AN 1",0,0.667};
等下一个条目
(优化编译器将使代码非常高效)
另一种可能是编写一些脚本(例如,在Python中,等等),它将解析一些数据文件,并(从该数据文件)生成一些initialize\u Fach.inc
文件,其中包含上述行,只需在C代码中添加,包括“initialize\u Gach.inc”
。当然,您需要修改构建过程(例如,改进Makefile
或某些Microsoft.vproj
东西)
不要忘记C代码,特别是用于初始化的代码,可以由其他代码生成。您可以在定义整个数组时对其进行初始化:
struct sFach Fach[] = {
{"Analysis 1", "AN1", 0, 0.0667},
{"Algebra", "AL", 0, 0.0889},
{"Kunst 1", "K1", 0, 0.1},
{"Kunst 2", "K2", 0, 0.1},
{"Kunst 3", "K3", 0, 0.1},
{"Heimatkunde", "HK", 0, 0.05},
...
};
外括号表示数组。如果初始化数组,可以省去维度;否则,剩余的数组项为零
内部大括号表示结构。如果您觉得冗长,您可以使用指定的初始化器,如Jack所示
如果要在初始化后分配整个结构,必须使用Basile所示的复合文字。您可以在定义整个数组时对其进行初始化:
struct sFach Fach[] = {
{"Analysis 1", "AN1", 0, 0.0667},
{"Algebra", "AL", 0, 0.0889},
{"Kunst 1", "K1", 0, 0.1},
{"Kunst 2", "K2", 0, 0.1},
{"Kunst 3", "K3", 0, 0.1},
{"Heimatkunde", "HK", 0, 0.05},
...
};
外括号表示数组。如果初始化数组,可以省去维度;否则,剩余的数组项为零
内部大括号表示结构。如果您觉得冗长,您可以使用指定的初始化器,如Jack所示
如果要在初始化后分配整个结构,必须使用Basile所示的复合文字。使代码可读且易于维护;这不是浪费代码行。代码行是如何相关的?如果要用4个成员填充结构,必须写4行。即使你能想出一种方法来避免,那又有什么用呢?使用一个复合文字或带有指定初始值设定项的初始值设定项。这样的数据不应该来自文件,而应该在程序中进行硬编码吗?然后制作一个传递4个值的函数,并让该函数执行strcpy和赋值。但这并不能让它变得“更快”,而是让代码可读且易于维护;这不是浪费代码行。代码行是如何相关的?如果要用4个成员填充结构,必须写4行。即使你能想出一种方法来避免,那又有什么用呢?使用一个复合文字或带有指定初始值设定项的初始值设定项。这样的数据不应该来自文件,而应该在程序中进行硬编码吗?然后制作一个传递4个值的函数,并让该函数执行strcpy和赋值。但这并不能使它“更快”,但请注意,这并不一定比原始代码更好。我个人觉得这有点难读,主要是因为单行格式。在我看来,将初始值设定项列表分成4行将提高可读性。我个人认为这相当可读,所以味道就是味道。除此之外,我刚刚回答了他的要求。他有头脑,能够选择适合自己的,我们不应该评判品味,而应该提供解决方案。就个人而言,
struct
的大写字段没有任何意义。但是请注意,这并不一定比原始代码更好。我个人觉得这有点难读,主要是因为单行格式。在我看来,将初始值设定项列表分成4行将提高可读性。我个人认为这相当可读,所以味道就是味道。除此之外,我刚刚回答了他的要求。他有头脑,能够选择适合自己的,我们不应该评判品味,而应该提供解决方案。例如,就个人而言,struct
的大写字段没有任何意义。我也建议使用此选项,因为它是迄今为止最可读的。我也建议使用此选项,因为