【问题标题】:How to convert month(int) into month name (string)如何将月份(int)转换为月份名称(字符串)
【发布时间】:2015-12-04 03:46:09
【问题描述】:

我正在处理的功能有问题。我能够获得正确的数据,但也不能打印出月份的名称。

我得到的示例输出:

|   Month   | High  |  Low  |  Avg  | Precip  |
|-----------|-------|-------|-------|---------|
1    | 9.8 | -26.2 | -7.8 | 55.3    |
2    | 7.5 | -23.3 | -8.6 | 33.1    |
3    | 14.2 | -19.6 | -4.7 | 33.2   |
4    | 23.7 | -5.3 | 6.2 | 56.8 |
5    | 33.0 | -0.6 | 13.9 | 62.7    |
6    | 32.1 | 8.0 | 19.7 | 69.7 |
7    | 34.9 | 12.6 | 22.2 | 181.8   |
8    | 31.5 | 11.0 | 20.9 | 69.2    |
9    | 34.1 | 5.0 | 16.1 | 69.0 |
10    | 24.8 | -2.9 | 10.8 | 56.9   |
11    | 16.0 | -12.8 | 2.1 | 36.2   |
12    | 15.6 | -17.8 | -4.2 | 65.8

我想将数字 1-12 转换为正确的月份名称。即:1 = 一月。

void printMonthlyStatistic(int month,const struct MonthlyStatistic* monthly)

是函数的样子

for(i=0;i<12;i++){
   printMonthlyStatistic(i+1,&monthly[i])

并且在 main 中被调用。

任何关于在哪里寻找合适的方法来完成这项工作的帮助都会很棒。谢谢!

【问题讨论】:

  • 提示:使用数字作为数组的索引。
  • switch (month)?或者更好的是,有一个月份名称字符串数组,其中索引是月份 int 值。
  • 这就是strftime() 的用途。

标签: c string struct


【解决方案1】:

您应该使用一个数组来存储月份的名称,例如:

const char * months[12] = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

您可以轻松获取月份的名称,例如index = 1,则

months[index -1]

会给你第一个月的名字:一月。


以下代码:

for (int i = 0; i < 12; ++i) {
    printf("%s ", months[i]);
}

将输出:

一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月十二月

【讨论】:

  • const char * 月[12] = {“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”};诠释 i = 0; printf(" %s | %.1f | %.1f | %.1f | %.1f |\n", 月[i], 月度->maxTemperature, 月度->minTemperature, 月度->averageTemperature, 月度->totalPrecipitation ); }
  • 每行只显示一月。我想弄清楚的是如何用正确的数据显示每个月
  • 当您初始化 i = 0 这就是为什么您总是得到 January 的原因。请阅读编辑后的答案。
  • @johnnysparks13 在第一条语句之后,您已经初始化了 i=0 ,并且在数组中的索引 0 处保存了 January 。 i 的值没有更新,因此您每次都会得到相同的答案
  • 也许可以使months[] const 也:const char * const months[12] = ....。这取决于 OP 的需求,但这种方式可能更易于优化。
【解决方案2】:

您可以维护字符串的月份数组,例如
char months_names[12] = {Jan, Feb, Mar, Apr, Jun, Jul, Aug, Sep, Oct, Nov, Dec};

您可以将整数月份复制到数组中以获取字符串值

months_names["Integrer Value"] 你会得到月份的字符串名称。

【讨论】:

  • 数组类型似乎是错误的 - 应该是const char *,数组值需要是字符串,并且索引需要为-1,因为 OP 说 Jan 是 1。
  • 那不是一个合适的数组。 a) 你没有正确初始化它,b) 它应该是 char * months_names[12] 而不仅仅是你写的。
猜你喜欢
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
相关资源
最近更新 更多