我正在通过采用技术并将其应用于我创建的实际程序中,汇率“计算器”基本上要求用户选择基础货币,然后以美元打印其价值.没有涉及到数学,我只是像谷歌/美元这样的谷歌搜索,并在下面讨论的数组中手动设置值.
但这里是我被卡住的地方.我认为学习多维数组的最佳方式是实际应用理论,所以这里是我迄今为止输入的内容(为简洁起见,我省略了我的程序的其他功能(包括调用这个函数的代码) :
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 GBP 1.5
2欧元1.23
3日元0.11
4加元0.96
5澳元0.87
当我单击构建时,我指定数组中的值的行将突出显示此警告的几个实例:
警告:在隐式常量转换中溢出
警告:格式’%s’期望类型’char *’,但参数2具有类型’int’
运行代码后,程序的其余部分工作正常,除了这个功能,这会产生一个“分段错误”或者一些这样的问题.
有人可以在这里给我一个手吗?任何帮助将不胜感激,以及任何链接到简单的C 2D / 3D字符串数组初始化教程! (我的两本书,K& R和教你自己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},}; }
我收到以下错误:
main.c:99:error:嵌套函数被禁用,使用-fnested-functions重新启用
main.c:99:error:expected’=’,’,’;’,’asm’或’attribute’
main.c:100:error:expected’;’之前的’}’标记
main.c:100:error:在’,’标记之前的预期表达式
解决方法
棘手的部分是数组的每个元素都需要存储两个东西:货币符号和相关联的汇率. C有一种构建一种存储两种东西的方式 – 它是结构体系.我们可以定义一个结构来保存单个货币:
struct currency { char symbol[4]; char value[5]; };
(注意,这不会创建一个变量;它创建一个类型.struct currency对char是分析的,除了我们自己定义了前者的含义).
…我们现在可以创建一个这样的数组:
struct currency currencies[5] = { {"GBP","1.5" },"1.23" },"0.11" },"0.96" },"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); } }