我试图在gregorian日历上创建一个程序,但是当我尝试在if else块中分配月份名称以及切换大小写时,代码块在运行时停止响应。
int main()
{
int month,year;
scanf("%d %d",&month,&year);
char month1[10];
if(month==1)
month1[10]="January";
else if(month==2)
month1[10]="February";
else if(month==3)
month1[10]="March";
else if(month==4)
month1[10]="April";
else if(month==5)
month1[10]="May";
else if(month==6)
month1[10]="June";
else if(month==7)
month1[10]="July";
else if(month==8)
month1[10]="August";
else if(month==9)
month1[10]="September";
else if(month==10)
month1[10]="October";
else if(month==11)
month1[10]="November";
else if(month==12)
month1[10]="December";
printf("%s %d",month1,year);
return 0;
}
同样,当我习惯在switch case中分配字符串值时,也会发生运行时错误
main()
{
int month,year;
scanf("%d %d",&month,&year);
char month1[15];
switch(month)
{
case 1:
month1[15]="January";
break;
case 2:
month1[15]="February";
break;
case 3:
month1[15]="March";
break;
case 4:
month1[15]="April";
break;
case 5:
month1[15]="May";
break;
case 6:
month1[15]="June";
break;
case 7:
month1[15]="July";
break;
case 8:
month1[15]="August";
break;
case 9:
month1[15]="September";
break;
case 10:
month1[15]="October";
break;
case 11:
month1[15]="November";
break;
case 12:
month1[15]="December";
break;
default:
printf("wrong input");
}
printf("%s %d",month1,year);
//char calender[6][7];
}
为什么会这样?
答案 0 :(得分:5)
您不会像这样分配C字符串,因为字符串是以char
值的空终止序列实现的。如果所有可能的值都是字符串文字,则可以改为使用char *
指针,如下所示:
char *month1;
if(month==1)
month1="January";
else if(month==2)
month1="February";
...
然而,更好的方法是构建一个查找表,并使用数组下标运算符获取月份名称:
char *months[] = {"January", "February", "March", ...}
if (month >=1 && month <= 12) {
printf("%s %d", months[month-1], year);
} else {
printf("wrong input");
}
答案 1 :(得分:2)
在C
中,strcpy()
是将值分配给strings
的正确方法。
尝试:strcpy(month1, "YourMonth")