一个C程序的疑问???

#include<stdio.h>voidmain(){intstrcmp(char*str1,char*str2);charstring1[10],string2[10... #include<stdio.h>
void main()
{
int strcmp(char *str1,char *str2);
char string1[10],string2[10];

gets(string1);
gets(string2);

printf("%d\n",strcmp(string1,string2));

}
int strcmp(char *str1,char *str2)
{
int flag=0;

while(*str1&&*str2)
{
if(*str1++>*str2++)
flag=1;
else if(*str1++<*str2++)
flag=-1;
else flag=0;
}

return flag;
}
我想表达出#include<string.h>中的strcmp.我知道这个程序是错的,但我想知道在这种错误的情况下(编译可通过),分析一下这个程序.

例子:
输入fasds和afdfdas,为什么输出0?

十分感谢!!!
展开
 我来答
liujiahi
2011-03-01 · TA获得超过1001个赞
知道小有建树答主
回答量:621
采纳率:66%
帮助的人:412万
展开全部
首先,判断完后要break;
if(*str1++>*str2++)
{
flag=1;
break;
}
else if(*str1++<*str2++)
{
flag=-1;
break;
}
第二,你没有考虑两个字符串长度不同的情况。
追问
谢谢!!!
对了,再问一下,字符串长度不是用while(*str1&&*str2)
解决了吗?
对了,我还想问一下,在我上面那个程序中我还想知道为什么输入fasds和afdfdas,为什么输出0?
qiugeen
2011-03-02 · TA获得超过210个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:172万
展开全部
问题一:
strcmp没理解正确,strcmp在比较时有两种情况程序结束:
1、比较遇到了"\0";
2、比较遇到了不同的字符。
你的程序只有比较最后一个字符。

问题二:

if(*str1++>*str2++)
else if(*str1++<*str2++)
else
从这个结构可以看出,你的指针循环一次加了两次(if加了一次else if 又加了一次),这是导致你的字符串比对出问题的原因。
注:在最后一次比对时,if比对不为真,指针加一,else if 比对下一个字符又不为真,指针加一,执行else语句,而这时短字符串已经指向了零,不在循环。返回0。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式