编程新手,不要获得2D/3D阵列

Rya*_*yan 9 c arrays multidimensional-array

嘿大家,我基本上是编程新手.我决定尝试开始使用C(不是 C++或C#),到目前为止我一直都做得很好.在我开始动摇之前,我设法成为二维阵列.虽然我认为我广泛理解2D整数数组,但我当然不理解3D字符串数组.

我正在学习采用这些技术并将其应用于我创建的实际程序中,汇率"计算器"基本上要求用户选择基础货币然后以美元打印其值.没有涉及数学,我只是搜索欧元/美元之类的东西,并在数组中手动​​设置值,我将在下面讨论.

但是这里我被卡住了.我认为学习多维数组的最佳方法是实际应用理论,所以这是我到目前为止输入的内容(为了简洁,我省略了我的程序的其他函数(包括调用此函数的代码)) :

 char currencies[5][3][4] = {
    {'1','2','3','4','5'},
    {'GBP','EUR','JPY','CAD','AUD'},
    {'1.5','1.23','0.11','0.96','0.87'}
};

int point, symbol, value;

displayarraycontents()
{
    for(point=1;point<5;point++){
        for(symbol=1;symbol<5;symbol++){
            for(value=1;symbol<5;symbol++)
                printf("%s ", currencies[point][symbol][value]);
            printf("\n");
        }}

}
Run Code Online (Sandbox Code Playgroud)

因为C不具有字符串数据类型,所以构建字符串数组完全是我的脑子.

货币为何[5] [3] [4]?因为我存储了总共5种货币,每种货币都标有3个字母的符号(例如EUR,CAD),其值最多为4位,包括小数点.

我正在尝试显示此列表:

1 GBP 1.5
2 EUR 1.23
3 JPY 0.11
4 CAD 0.96
5 AUD 0.87

当我单击构建时,我指定数组中值的行会突出显示此警告的几个实例:

警告:隐式常量转换溢出

...此行警告突出显示我打印数组内容的行:

警告:格式'%s'需要类型'char*',但参数2的类型为'int'

在运行代码时,程序的其余部分工作正常,除了此功能,这会产生"分段错误"或某些.

有人可以帮我一把吗?任何帮助将不胜感激,以及任何简单的C 2D/3D字符串数组初始化教程的链接!(我的两本书,K&R和Teach Yourself C只提供了不相关的模糊例子)

提前致谢!
-Ryan

编辑:使用struct更新代码:

struct currency {
    char symbol[4];
    float value[5];
};


void displayarraycontents(){

        int index;

        struct currency currencies[] {
            {"GBP", 1.50},
            {"EUR", 1.23},
            {"JPY", 0.11},
            {"CAD", 0.96},
            {"AUD", 0.87},};

}
Run Code Online (Sandbox Code Playgroud)

我得到以下错误:main.c:99:错误:嵌套函数被禁用,使用-fnested-functions重新启用
main.c:99:error:expected'=',',',';',' '{'token main.c:100:error:expected';' 之前的asm'或' attribute
' 在'}'标记
main.c:100之前:错误:在','标记之前的预期表达式

在实际的代码窗口本身中,每个符号都被标记为"意外的令牌".

caf*_*caf 9

在这种情况下,您实际上并不需要3D数组.事实上,由于你有一个值,所以你需要的只是一维数组.

棘手的部分是阵列的每个元素需要存储件事:货币符号和相关的汇率.C有一种构建存储两种东西的方式 - 它是struct机制.我们可以定义一个struct持有单一货币:

struct currency {
    char symbol[4];
    char value[5];
};
Run Code Online (Sandbox Code Playgroud)

(请注意,这不创建一个变量,它会创建一个类型, struct currency很是类似char,不同的是我们定义的前自己的意思).

...现在我们可以创建一个包含以下5个数组的数组:

struct currency currencies[5] = { 
    {"GBP", "1.5" },
    {"EUR", "1.23" },
    {"JPY", "0.11" },
    {"CAD", "0.96" },
    {"AUD", "0.87" } };
Run Code Online (Sandbox Code Playgroud)

要迭代它们并打印出来,代码看起来像:

void displayarraycontents(void)
{
    int point;

    for(point = 0; point < 5; point++)
    {
        printf("%d %s %s\n", point + 1, currencies[point].symbol, currencies[point].value);
    }
}
Run Code Online (Sandbox Code Playgroud)