我在C中进行了新的编程,我想做一个程序,使用switch将月份转换为月份编号。
例如:
输入:
"january"
输出:
"1"
我在这做什么:
void function(char number[]);
int main()
{
char xm[20];
printf("Month:");
scanf("%s", &xm);
function(xm);
return 0;
}
void function (char number[20])
{
switch (number[20])
{
case 'january': printf("1");
break;
case 'february': printf("2");
break;
case 'march': printf("3");
break;
default:
printf("error");
}
}
答案 0 :(得分:0)
你不能在c中做到这一点,switch
只能使用整数,传递一个指向它的指针可能会编译但不会做你需要的。
在你的情况下,我想你的意思是
switch (number)
并且可以编译,multicharacter literals 1 也会使你的代码编译,但是它们将被计算为一个实现定义的整数,所以你的代码会意外编译但肯定会编译不像你期望的那样工作。
你能做的最好的事情就是定义一个结构并使用bsearch()
这样的 2
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct mi {
int nr;
char *name;
} months[] = {
{ 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
{ 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
{ 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
};
#define nr_of_months (sizeof(months)/sizeof(months[0]))
static int
compmi(const void *m1, const void *m2)
{
struct mi *mi1 = (struct mi *) m1;
struct mi *mi2 = (struct mi *) m2;
return strcmp(mi1->name, mi2->name);
}
int
main(int argc, char **argv)
{
int i;
qsort(months, nr_of_months, sizeof(struct mi), compmi);
for (i = 1; i < argc; i++) {
struct mi key, *res;
key.name = argv[i];
res = bsearch(&key, months, nr_of_months,
sizeof(struct mi), compmi);
if (res == NULL)
printf("'%s': unknown month\n", argv[i]);
else
printf("%s: month #%d\n", res->name, res->nr);
}
exit(EXIT_SUCCESS);
}
1 此链接已从Fred Larson的评论中复制。
2 这个例子来自bseach()
答案 1 :(得分:0)
你做不到。至少,不是在C。
改为使用
if((strcmp(number,"january")==0)
printf("1");
else if((strcmp(number,"february")==0)
printf("2");
//etc
请注意,您需要添加string.h
才能使用strcmp
。
另一种方法是将所有月份的名称存储在二维char
数组中。循环遍历此数组,并使用strcmp
将输入与每个月的名称进行比较。如果找到匹配项,则打印月份数组的当前索引+ 1。