从数组正确输出字符串的困难?

时间:2014-07-08 07:07:43

标签: c

我正在创建一个程序,该程序从用户采用一种日期格式,例如:“01/14/2013”​​作为字符串并将其输出为月,日和年格式,或者:“1月14,2013" 。当我输入日期时,我无法弄清楚为什么它没有正确输出字符串,例如,如果我输入'01',它输出1月正确,但如果我输入'02',它不会打印完全出二月。这是我的计划:

#include <stdio.h>
#include <string.h>


int main(void) //int main() is c++, int main(void) is C
{ 
  char date[100]; 
  char month[100]; 
  char array[12][100] ={"January", "February", "March", "April", "May", "June",
                      "July", "August", "September", "October", "November",
                      "December"};

  printf(" Please enter a date "); 
  fgets( date, 100, stdin); 

  if( date[0] == '0' && date[1] == '1')
  {
    strcpy( month, array[0]); 
  }
  else if( date [0] =='0' && date[1] == '2')
  { 
    strcpy( month, array[1]);
  }   

  printf(" %s", month); 

  return 0; 

}  

1 个答案:

答案 0 :(得分:0)

虽然您可以设置精心设计的解析路由以自定义方式处理日期。您还可以使用strptime将字符串转换为日期对象,然后使用strftime以任何所需格式将字符串输出到缓冲区。 man pages包含我根据您的情况调整的所有格式说明符和示例。看看:

#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int
main(int argc, char *argv[])
{
    struct tm tm;
    char buf[255];

    if (argc < 2 ) {
        fprintf (stderr, "Error: insufficient input, usage: %s date (mm/dd/yyyy)\n",
                 argv[0]);
        return 1;
    }

    memset(&tm, 0, sizeof(struct tm));
    strptime(argv[1], "%m/%d/%Y", &tm);
    strftime(buf, sizeof(buf), "%A, %B %e, %Y", &tm);
    printf ("\n  The formatted date is:  %s\n\n",buf);
    return 0;
}

只需在mm/dd/yyyy格式的命令行中输入任何日期,其输出类似于您要查找的内容:

$ ./bin/s2t 07/08/2014

The formatted date is:  Tuesday, July  8, 2014