- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
大家好,我基本上是编程新手。我决定尝试开始使用 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/
所以我今天在学习c。我编写了一些代码以使用 getchar() 获取输入并将其保存在变量中以了解整数输入的工作原理。 因此,如果用我的键盘输入“1”,然后按回车键,我会返回 4910 的值。我预计 4
我是一个非常沮丧的新手!我真的不知道从哪里开始。我有一个基于傻瓜书中的应用程序的应用程序。成功了。然后尝试将其转换为使用 WIMMOne 对话框来显示时间和日期。经过一系列错误的启动后,我加载了他们的
我们刚刚使用 bitbucket 建立了一个项目。我们将“生产”[P] 代码放在一个存储库中,然后我创建了它的一个分支 [m],然后我的同事 [C] 也创建了一个分支。 [P] /
我不明白我看到的错误,也不明白我应该在我的 ESLint 配置中更改什么来修复它,在深入研究了一段时间之后。 我有一段使用 ECMA 版本 6 (ES6) 的 JS 代码,如下所示: const la
我的代码有很多问题。编译时出现以下错误: “Ecommerce.DataHelpers.ProductNodeLoader”未实现接口(interface)成员“System.Collections.
我不明白这个语法是如何工作的,也找不到关于它的文档: word = '123xyz567' s = ''.join (c if c.isdigit() else ' 'for c in word) 第
不知道怎么解释,是在IE7中出现的,右边的DIV向右浮动,取消设置它的宽度,左边 float 的子DIV会变成和父DIV一样宽。 http://jsfiddle.net/dyvar/1/ IE 7 最
$newUser.addClass(newTweet.user).attr('data-user', newTweet.user).text('@' + newTweet.user + ': ');
我有一个带有输入框的 tkinter GUI,我只想允许数字。有人可以向我解释验证中每个命令/代码行的作用。我不明白 vcmd 变量和所有 '%i' '%s' 的东西。谢谢:) 更新:我有一个不同的应
我正在尝试使用 Richard Dawkin 的 Weasel Program 的 Python 版本这演示了随机选择与累积选择之间的差异,并且我的变异算法存在一些问题。我想也许我不明白如何使用Pyt
我正在学习嵌套,我的任务是让每一行都以缩进开头。这是我的代码,但它不起作用 $nestingDepth = 0 def logger description, &block puts "Beg
我正在编译 gcc 并阅读来自 https://gcc.gnu.org/install/configure.html 的手册 具体说明 --with-local-prefix=dirname Spec
我是一名优秀的程序员,十分优秀!