第一个错误:m是一个普通变量,输入的时候,格式不应该是%s,所以主函数里面的scanf("%s",&m);应该改成scanf("%c",&m);
第二个错误:if(m==a) x=reverse;
else if(m==b) x=upper;
a和b没有值,所以应该把这个改成
a='a';b='b';
if(m==a) x=reverse;
else if(m==b) x=upper;
第三个错误:c=(*x)(*y,n);被调函数第一个参数是指针,传过去的应该是地址,所以应该改成
c=(*x)(y,n);
#include
#include
char* reverse(char *p,int n)
{
int i;
char t;
for(i=0; i <= n/2; i++)
{
t=p[i];
p[i]=p[n-1-i];
p[n-1-i]=t;
}
return p;
}
char* upper(char *p,int n)
{
int i;
for(i=0; i < n; i++)
{
if(p[i]>='a'&&p[i]<='z')
p[i]+='A'-'a';
}
return p;
}
int main()
{
char* (*x)(char*,int);
char str[999],m,n,*c;
printf("please enter string str:");
gets(str);
n=strlen(str);
printf("please choose a or b:");
scanf("%c",&m);
if(m=='a') x=reverse;
else if(m=='b') x=upper;
c=x(str,n);
if(m=='a') printf("reverse:%s\n",c);
else printf("upper:%s\n",c);
return 0;
}