以下程序是输入数字月份,实现输出英语月份
例如:输入3,输出是March
1-8月都能正确输出英文月份,但是9-12月就无法正常输出了,调试的时候查看了下,调用函数能正确返回需要的值,但是在进行printf输出这里出错了,该用数组可以正确输出,请告知我这里指针是哪里用错了,为什么会出现这样的错误。急切等待高手解答
#include <stdio.h>
#include <string.h>
void main()
{
int m,i;
char a[20],b[20];
char *p;
p=a;
char *change(int);
printf("put into month:\n");
scanf("%d",&m);
if(m>=1&&m<=12)
{
p=change(m);
printf("%s\n",p);
}
else printf("you put error month\n");
}
char *change(int x)
{
char a[12][20]={"January","February","March","April","May","June","July","August","September","October","November","December"};
switch(x)
{
case 1:return a[0];break;
case 2:return a[1];break;
case 3:return a[2];break;
case 4:return a[3];break;
case 5:return a[4];break;
case 6:return a[5];break;
case 7:return a[6];break;
case 8:return a[7];break;
case 9:return a[8];break;
case 10:return a[9];break;
case 11:return a[10];break;
default:return a[11];break;
}
}
改用数组接受返回的指针,1-12月都正确,按1楼所说函数结束变量就不存在,这是为什么?
#include <stdio.h>
#include <string.h>
void main()
{
int m,i;
char a[20],b[20];
char *p;
p=a;
char *change(int);
printf("put into month:\n");
scanf("%d",&m);
if(m>=1&&m<=12)
{
p=change(m);
for (i=0;i<20;i++)
{
b[i]=*p;
p++;
}
printf("%s\n",b);
}
else printf("you put error month\n");
}
char *change(int x)
{
char a[12][20]={"January","February","March","April","May","June","July","August","September","October","November","December"};
switch(x)
{
case 1:return a[0];break;
case 2:return a[1];break;
case 3:return a[2];break;
case 4:return a[3];break;
case 5:return a[4];break;
case 6:return a[5];break;
case 7:return a[6];break;
case 8:return a[7];break;
case 9:return a[8];break;
case 10:return a[9];break;
case 11:return a[10];break;
default:return a[11];break;
}
}