C语言关于指针的一道题求大家帮忙解答

题目:输入一个字符串,让用户选择a或b选项,选a时调用reverse函数进行转置处理;选b时调用upper函数进行大写化处理。要求采用函数指针实现(参考例8.23的实现)... 题目:输入一个字符串,让用户选择a或b选项,选a时调用reverse函数进行转置处理;选b时调用upper函数进行大写化处理。要求采用函数指针实现(参考例8.23的实现),各调用函数内的功能采用字符指针进行操作。

我写的程序:
#include <stdio.h>
#include <string.h>

char reverse(char *p,int n)
{
int i,j,t;
for(i=0;i<n/2;i++);
{
t=*(p+i);
*(p+i)=*(p+n-1-i);
*(p+n-1-i)=t;
}
for(j=0;j<n;j++)
printf("%s",*(p+j));
}

char upper(char *p,int n)
{
int i;
for(;*p!='\0';*p++)
{
if(*p>='a'&&*p<='z')
*p+='A'-'a';
}
for(i=0;i<n;i++)
printf("%s",*(p+i));
}

int main()
{
char reverse(char *p,int n);
char upper(char *p,int n);
int (*x)(char,int);
char str[999],a,b,m,n,c;
char *y=str;
printf("please enter string str:");
gets(str);
n=strlen(str);
printf("please choose a or b:");
scanf("%s",&m);
if(m==a) x=reverse;
else if(m==b) x=upper;
c=(*x)(*y,n);
if(m==a) printf("reverse:%s\n",c);
else printf("upper:%s\n",c);
return 0;
}

运行不出结果,拜托大家帮我看看错在哪里
展开
 我来答
yr78044367
2015-06-09 · TA获得超过534个赞
知道小有建树答主
回答量:397
采纳率:100%
帮助的人:89.8万
展开全部
第一个错误: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);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lgao622
2015-06-09 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6548
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
#include <stdio.h>
#include <string.h>

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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式