为什么还有额外的号码?

时间:2012-10-22 12:34:12

标签: c date

示例:

输入(dd mm yyyy):2011年11月11日

输出:2011年11月11日

这是正确的,但月和年之间有一个额外的数字

我不知道如何删除它。请帮忙!

#include <stdio.h>
int getDay(int day)
{
  switch(day)
  {
    case 1: printf("%dst ", day); break;
    case 2: printf("%dnd ", day); break;
    case 3: printf("%drd ", day); break;
    default: printf("%dth ", day); break;
  }
}
int getMonth(int month)
{
  switch(month)
  {  
    case 1: printf("January "); break;
    case 2: printf("February "); break;
    case 3: printf("March "); break;
    case 4: printf("April "); break;
    case 5: printf("May "); break;
    case 6: printf("June "); break;
    case 7: printf("July "); break;
    case 8: printf("August "); break;
    case 9: printf("September "); break;
    case 10: printf("October "); break;
    case 11: printf("November "); break;
    case 12: printf("December "); break;
    default: printf("Invalid "); break;
  }
}

int main()
{
  int day, month, year;
  printf("Enter date in dd mm yyyy format: ");
  scanf("%d %d %d", &day, &month, &year);
  day = getDay(day);
  month = getMonth(month);
  year = year;
  printf("%d", day);
  printf("%d", month);
  printf("%d", year);
  fflush(stdin);
  getchar();
}

5 个答案:

答案 0 :(得分:1)

为什么你的getMonth函数(IMO应该被称为printMonth)都有副作用(它打印一些东西)并提供一些有用的(但未指定的)值(即缺少{ {1}})?您应该学会启用所有警告,改进代码,直到编译器没有给出警告,并使用调试器。在Linux上,这意味着使用return进行编译,然后使用gcc -Wall -g source.c -o myprog进行调试

答案 1 :(得分:1)

您的getMonth()getDay()函数都应根据标题返回int,您没有从函数返回任何内容,因此存储在这些行中的内容为:

day = getDay(day);
month = getMonth(month); 

有人在猜测,那么你在这里打印这些值:

printf("%d", day);   
printf("%d", month); 

如果您只想显示“2011年11月11日”,您的getDaygetMonth函数都会返回无效,请勿重新分配daymonth,并重组你的输出:

getDay(day);         //print day and "th" or "st" or "rd"
getMonth(month);     //print month
printf("%d", year);  //print year

答案 2 :(得分:0)

您在这里打印日期和月份两次是重新定义的代码

 #include <stdio.h>
 void getDay(int day)
 {
   switch(day)
 {
      case 1: printf("%dst ", day); break;
       case 2: printf("%dnd ", day); break;
       case 3: printf("%drd ", day); break;
       default: printf("%dth ", day); break;
 }
}
void getMonth(int month)
{
 switch(month)
{
  case 1: printf("January "); break;
   case 2: printf("February "); break;
   case 3: printf("March "); break;
    case 4: printf("April "); break;
case 5: printf("May "); break;
case 6: printf("June "); break;
case 7: printf("July "); break;
case 8: printf("August "); break;
case 9: printf("September "); break;
case 10: printf("October "); break;
case 11: printf("November "); break;
case 12: printf("December "); break;
default: printf("Invalid "); break;
}
}

int main()
{
   int day, month, year;
   printf("Enter date in dd mm yyyy format: ");
    scanf("%d %d %d", &day, &month, &year);
      getDay(day);
    getMonth(month);
    year;
   // printf("%d", day);
  // printf("%d", month);
   printf("%d", year);
   fflush(stdin);
   getchar();
}

这是一种方式......

答案 3 :(得分:0)

#include <stdio.h>
int getDay(int day)
{
  switch(day)
  {
    case 1: printf("%dst ", day); break;
    case 2: printf("%dnd ", day); break;
    case 3: printf("%drd ", day); break;
    default: printf("%dth ", day); break;
  }
}
int getMonth(int month)
{
  switch(month)
  {  
    case 1: printf("January "); break;
    case 2: printf("February "); break;
    case 3: printf("March "); break;
    case 4: printf("April "); break;
    case 5: printf("May "); break;
    case 6: printf("June "); break;
    case 7: printf("July "); break;
    case 8: printf("August "); break;
    case 9: printf("September "); break;
    case 10: printf("October "); break;
    case 11: printf("November "); break;
    case 12: printf("December "); break;
    default: printf("Invalid "); break;
  }
}

int main()
{
  int day, month, year;
  printf("Enter date in dd mm yyyy format: ");
  scanf("%d %d %d", &day, &month, &year);
  getDay(day);
  getMonth(month);
  printf("%d", year);
  fflush(stdin);
  getchar();
}

答案 4 :(得分:0)

您在该代码中有很多错误和未定义的行为。我建议做一些类似的事情:

#include <stdio.h>

typedef enum
{
  DAY_FORMAT_ST,
  DAY_FORMAT_ND,
  DAY_FORMAT_RD,
  DAY_FORMAT_TH,
  DAY_FORMAT_N

} day_format_t;

#define MONTHS_N  12


const char* get_day_str   (unsigned int day);
const char* get_month_str (unsigned int month);



int main()
{
  int day;
  int month;
  int year;

  printf("Enter date in dd mm yyyy format: ");
  scanf("%d %d %d", &day, &month, &year);
  getchar(); // clear trailing line feed from stdin


  printf("%d%s ", day, get_day_str(day));
  printf("%s ", get_month_str(month));
  printf("%d", year);
  getchar();
  return 0;
}



const char* get_day_str (unsigned int day)
{
  static const char* DAY_FORMAT [DAY_FORMAT_N] =
  {
    "st",
    "nd",
    "rd",
    "th"
  };

  day_format_t  day_index = day - 1; // compensate for 0-index arrays
  const char*   result;

  if (day_index < DAY_FORMAT_TH)
  {
    result = DAY_FORMAT[day_index];
  }
  else
  {
    result = DAY_FORMAT[DAY_FORMAT_TH];
  }

  return result;
}

const char* get_month_str (unsigned int month)
{
  static const char* MONTH [MONTHS_N] =
  {
    "January",
    "February",    
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
  };

  return MONTH [month-1];
}

请注意,代码需要额外的错误处理来处理奇怪的用户输入,并且这种错误处理最好应该在main()中,而不是在函数内部。