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值 展开
#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值 展开
展开全部
你的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;
}
展开全部
对于相等情况下 可以直接返回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是库函数名 自己写 最好换一个名字 不然有的编译器会出错的。
来自:求助得到的回答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询