示例:
输入(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();
}
答案 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日”,您的getDay
和getMonth
函数都会返回无效,请勿重新分配day
和month
,并重组你的输出:
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()中,而不是在函数内部。