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];

我正在使用Visual Studio 2013和标准C

我的程序需要四行代码
{Analysis 1”,“AN 1”,0,0.0667}
in
Fach[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
的大写字段没有任何意义。我也建议使用此选项,因为它是迄今为止最可读的。我也建议使用此选项,因为