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之前:错误:在','标记之前的预期表达式
在实际的代码窗口本身中,每个符号都被标记为"意外的令牌".
在这种情况下,您实际上并不需要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)