c语言问题,为什么返回值是111,不是0

#include<stdio.h>#include<stdlib.h>#include<math.h>intmain(){intstrcmp(char*p1,char*p... #include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int strcmp(char*p1,char*p2);
char *c1="boy",*c2="boy";
int a;
a=strcmp(c1,c2);
printf("%d\n",a);
system("pause");

}
int strcmp(char*p1,char*p2)
{

if(*p1=='\0'||*p2=='\0')
{
return 0;

}
if(*p1==*p2)
{
p1++;
p2++;
strcmp(p1,p2);
}
if(*p1!=*p2)
{
return *p1-*p2;
}
}
还有不知道要怎么当return0后直接回到主函数,111是o的ascii值
展开
 我来答
White_MouseYBZ
2017-02-25 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6471万
展开全部

你的strcmp写乱套了。你用的是递归结构,所以return 0;后不可能回到主调函数,而是返回到上次调用的那里(p2++;后面的调用中)。但是,递归调用前又对p1、p2进行了++处理,这就有问题了,因为返回后就不是这一次调用前的“现场”了。单从递归正确写法说,应该把p1++;和p2++;删除,而把strcmp(p1,p2);改为strcmp(p1+1,p2+1);——但即使这样改了也不能达到目的,因为逻辑还有问题。其实这代码完全可以写得简单明了:

int strcmp(char*p1,char*p2)
{
    while(*p1==*p2 && *p1)
        p1++,p2++;
    return *p1-*p2;
}
风若远去何人留
2017-02-25 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450110
专业C/C++软件开发

向TA提问 私信TA
展开全部

对于相等情况下 可以直接返回strcmp递归调用的返回值

不然 返回的就是随机值了。 

这样

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int strcmp(char*p1,char*p2);
char *c1="boy",*c2="boy";
int a;
a=strcmp(c1,c2);
printf("%d\n",a);
system("pause");

}
int strcmp(char*p1,char*p2)
{

if(*p1=='\0'||*p2=='\0')
{
return 0;

}
if(*p1==*p2)
{
p1++;
p2++;
return strcmp(p1,p2);//return 递归返回值。
}
if(*p1!=*p2)
{
return *p1-*p2;
}
}

另外 strcmp是库函数名 自己写 最好换一个名字 不然有的编译器会出错的。 

来自:求助得到的回答
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式