gpt4 book ai didi

c - 编程新手,不懂2D/3D数组

转载 作者:太空狗 更新时间:2023-10-29 16:52:25 24 4
gpt4 key购买 nike

大家好,我基本上是编程新手。我决定尝试开始使用 C(不是 C++ 或 C#),到目前为止我做得很好。在我开始犹豫之前,我设法达到了二维数组。虽然我认为我大致理解 2D 整数数组,但我当然不理解 3D 字符串数组。

我通过采用这些技术并将它们应用到我创建的实际程序中来学习,汇率“计算器”基本上需要用户选择一种基础货币,然后以美元打印它的值(value)。不涉及数学,我只是用谷歌搜索 EUR/USD 之类的东西,然后在下面讨论的数组中手动​​设置值。

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

 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");
}}

}

因为 C 没有字符串数据类型,所以构建字符串数组完全让我头疼。

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

我正在尝试显示此列表:

1 英镑 1.5
2 欧元 1.23
3 日元 0.11
4 加元 0.96
5 澳元 0.87

当我点击构建时,我在数组中指定值的那一行被高亮显示,并出现了这个警告的几个实例:

警告:隐式常量转换溢出

...并且我打印数组内容的行被突出显示并带有此警告:

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

运行代码后,程序的其余部分工作正常,除了这个函数,它会产生“段错误”或类似的错误。

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

提前致谢!
-瑞安

编辑:使用结构更新代码:

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},};

}

我收到以下错误:main.c:99: 错误:嵌套函数被禁用,使用 -fnested-functions 重新启用
main.c:99: 错误:在“{”标记
之前需要“=”、“、”、“;”、“asm”或“属性”main.c:100: 错误:应为 ';'在 '}' 标记之前
main.c:100: 错误:',' 标记前的预期表达式

在实际的代码窗口中,每个符号都被标记为“意外标记”。

最佳答案

在这种情况下,您实际上不需要 3D 数组。事实上,因为您有一个值的,所以您只需要一个一维数组。

棘手的部分是数组的每个元素都需要存储两个 东西:货币符号和相关的汇率。 C 有一种构建类型的方法,该类型存储两种东西 - 它是 struct 机制。我们可以定义一个 struct 来持有单一货币:

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

(请注意,这不会创建一个变量;它会创建一个类型struct currency 类似于char,只是我们自己定义了前者的含义)。

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

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

要遍历它们并将它们打印出来,代码如下所示:

void displayarraycontents(void)
{
int point;

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

关于c - 编程新手,不懂2D/3D数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3129031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com