换个姿势学C语言 第5章 获取完整的牌价数据 5.4节 获取和显示货币名称
0. 说明
《换个姿势学C语言》由何旭辉 著,清华大学出版社2022年出版。感谢何老师!

这是一本非常不错的书!
- 第一、二、三章总结参考换个姿势学C语言 第1-3章
- 第四章总结参考换个姿势学C语言 第4章
- 第五章5.1节总结参考换个姿势学C语言 第5章 5.1节
- 第五章5.2节总结参考换个姿势学C语言 第5章 5.2节
- 第五章5.3节总结参考换个姿势学C语言 第5章 5.3节
- 第五章5.4节总结参考换个姿势学C语言 第5章 5.4节
5. 获取完整的牌价数据
5.4 获取和显示货币名称
在5.1.2节中,我们已经可以使用一个双精度浮点型数组存储现汇买入价、现钞买入价、现汇卖出价、现钞卖出价和中行折算价。

在BOCRates.h头文件中定义了函数GetRatesAndCurrencyNameByCode:
| |
该函数不仅会返回货币名称,还会顺便返回牌价的发布时间。
在中行外汇网站上面可以看到,有多种货币:
| 货币名称 | 现汇买入价 | 现钞买入价 | 现汇卖出价 | 现钞卖出价 | 中行折算价 | 发布日期 | 发布时间 | 长度 |
|---|---|---|---|---|---|---|---|---|
| 港币 | 88.1 | 88.1 | 88.46 | 88.46 | 88.25 | 2026/3/7 | 10:30:00 | 2 |
| 卢布 | 8.41 | 8.41 | 8.84 | 8.84 | 8.78 | 2026/3/7 | 10:30:00 | 2 |
| 美元 | 689.4 | 689.4 | 692.3 | 692.3 | 690.25 | 2026/3/7 | 10:30:00 | 2 |
| 欧元 | 797.99 | 797.99 | 803.83 | 803.83 | 801.32 | 2026/3/7 | 10:30:00 | 2 |
| 日元 | 4.3577 | 4.3577 | 4.3914 | 4.3914 | 4.3814 | 2026/3/7 | 10:30:00 | 2 |
| 英镑 | 921.13 | 921.13 | 927.98 | 927.98 | 921.98 | 2026/3/7 | 10:30:00 | 2 |
| 澳门元 | 85.54 | 85.54 | 85.93 | 85.93 | 85.64 | 2026/3/7 | 10:30:00 | 3 |
| 韩国元 | 0.4616 | 0.4616 | 0.4713 | 0.4713 | 0.4662 | 2026/3/7 | 10:30:00 | 3 |
| 林吉特 | 174.39 | 175.96 | 174.99 | 2026/3/7 | 10:30:00 | 3 | ||
| 泰国铢 | 21.62 | 21.62 | 21.8 | 21.8 | 21.75 | 2026/3/7 | 10:30:00 | 3 |
| 文莱元 | 496.64 | 583.02 | 540.52 | 2026/3/7 | 10:30:00 | 3 | ||
| 新台币 | 20.78 | 22.77 | 21.75 | 2026/3/7 | 10:30:00 | 3 | ||
| 越南盾 | 0.025 | 0.0276 | 0.0264 | 2026/3/7 | 10:30:00 | 3 | ||
| 丹麦克朗 | 106.78 | 106.78 | 107.64 | 107.64 | 107.25 | 2026/3/7 | 10:30:00 | 4 |
| 加拿大元 | 506.49 | 506.49 | 510.47 | 510.47 | 504.94 | 2026/3/7 | 10:30:00 | 4 |
| 捷克克朗 | 29.21 | 36.43 | 32.94 | 2026/3/7 | 10:30:00 | 4 | ||
| 南非兰特 | 41.38 | 41.38 | 41.86 | 41.86 | 41.44 | 2026/3/7 | 10:30:00 | 4 |
| 挪威克朗 | 71.64 | 71.64 | 72.22 | 72.22 | 71.34 | 2026/3/7 | 10:30:00 | 4 |
| 瑞典克朗 | 74.84 | 74.84 | 75.44 | 75.44 | 74.83 | 2026/3/7 | 10:30:00 | 4 |
| 瑞士法郎 | 885.06 | 885.06 | 891.9 | 891.9 | 884.14 | 2026/3/7 | 10:30:00 | 4 |
| 新加坡元 | 537.89 | 537.89 | 541.94 | 541.94 | 539.07 | 2026/3/7 | 10:30:00 | 4 |
| 新西兰元 | 405.92 | 405.92 | 408.98 | 408.98 | 407.21 | 2026/3/7 | 10:30:00 | 4 |
| 印度卢比 | 7.1201 | 7.9388 | 7.5422 | 2026/3/7 | 10:30:00 | 4 | ||
| 印尼卢比 | 0.0403 | 0.0403 | 0.0413 | 0.0413 | 0.041 | 2026/3/7 | 10:30:00 | 4 |
| 澳大利亚元 | 483.07 | 483.07 | 486.91 | 486.91 | 484.15 | 2026/3/7 | 10:30:00 | 5 |
| 巴西雷亚尔 | 124.78 | 139.08 | 131.32 | 2026/3/7 | 10:30:00 | 5 | ||
| 菲律宾比索 | 11.57 | 11.57 | 11.81 | 11.81 | 11.75 | 2026/3/7 | 10:30:00 | 5 |
| 柬埔寨瑞尔 | 0.153 | 0.1913 | 0.1725 | 2026/3/7 | 10:30:00 | 5 | ||
| 墨西哥比索 | 38.37 | 38.37 | 39.15 | 39.15 | 38.99 | 2026/3/7 | 10:30:00 | 5 |
| 尼泊尔卢比 | 3.8487 | 5.4711 | 4.729 | 2026/3/7 | 10:30:00 | 5 | ||
| 沙特里亚尔 | 182.7 | 182.7 | 185.28 | 185.28 | 183.92 | 2026/3/7 | 10:30:00 | 5 |
| 土耳其里拉 | 14.57 | 14.57 | 16.77 | 16.77 | 15.67 | 2026/3/7 | 10:30:00 | 5 |
| 匈牙利福林 | 2.0191 | 2.0191 | 2.0599 | 2.0599 | 2.0672 | 2026/3/7 | 10:30:00 | 5 |
| 阿联酋迪拉姆 | 186.68 | 186.68 | 189.32 | 189.32 | 187.95 | 2026/3/7 | 10:30:00 | 6 |
| 巴基斯坦卢比 | 2.027 | 2.917 | 2.4748 | 2026/3/7 | 10:30:00 | 6 | ||
| 卡塔尔里亚尔 | 168.49 | 210.15 | 189.54 | 2026/3/7 | 10:30:00 | 6 | ||
| 科威特第纳尔 | 2007.15 | 2503.31 | 2257.77 | 2026/3/7 | 10:30:00 | 6 | ||
| 蒙古图格里克 | 0.18 | 0.18 | 0.207 | 0.207 | 0.1938 | 2026/3/7 | 10:30:00 | 6 |
| 以色列谢克尔 | 201.29 | 246.02 | 223.8 | 2026/3/7 | 10:30:00 | 6 | ||
| 塞尔维亚第纳尔 | 6.7534 | 6.8898 | 6.8374 | 2026/3/7 | 10:30:00 | 7 |
最长的化名名称是“塞尔维亚第纳尔”,有7个汉字。书上之前编写的时候,最长的货币名称是“阿联酋迪拉姆”,一共6个汉字,一个汉字需要2字节,6个汉字就需要12个字节来存储,加上字符串终止符,一共需要13个字节来存储。也就是说定义一个13字节的字符数组就可以存储任意一个货币名称。如果仅定义13字节的字符数组,现在最长的“塞尔维亚第纳尔”就存储不进去了!!!
- 为数据准备内存空间时不要过于节约,还需要考虑客户需求未来有发生变化的可能。虽然国际货币种类发生变化的概率不是很大,但这种可能性仍然存在,所以将数据定义得大一些,以浪费一些内存空间来应对可能的变化是一个好做法。
基于以上考虑,定义了以下数组用于存储货币名称:
| |
这个数组最多可以存储16个汉字和1个字符串终止符。
GetRatesAndCurrencyNameByCode函数返回的发布时间的格式是这样的:
| |
一共有19个字符(空格也算一个字符),加上字符串终止符,需要20个字节来存储。
创建代码:
| |
运行工程,显示如下:

到此,我们已经可以完整地获得某种货币的全部牌价信息,并将获得的牌价、货币名称和发布时间存储在三个数组 中。
后面需要看如何获取所有货币代码,以及如何展示。
