我是李超人
2013-09-09 13:53
采纳率: 100%
浏览 2.5k
已采纳

C语言程序运行时出现问题

/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
char s1[80],s2[80];
int i,flag=1,resu;
printf("Please input s1 and s2:\n");
gets(s1);
gets(s2);
for(i=0;;i++)
{
if(s1[i]>s2[i])
{
printf("%d",s1[i]-s2[i]);
flag=0;
break;
}
if(s1[i]<s2[i])
{
printf("%d",s1[i]-s2[i]);
flag=0;
break;
}
if(s1[i]==s2[i]=='\0')
{
resu=0;
printf("%d",resu);
}
}
if(flag)
{
resu=0;
printf("%d",resu);
}
}
//这是我写的一行代码,该程序的功能是比较两个字符串s1和s2的大小,若s1大于s2输出一个正数,等于则输出0,小于则输出一个负数,不要用strcpy函数,输出的正数或负数的绝对值必须为相比较的两个字符串相应字符的ASCII码的差值,例如‘A’与‘C’相比就输出-2;输入and和and,输出应为0.但是当我输入and和and时,输出为-43,这是为何?求大神帮助。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • phoenixylf 2013-09-10 01:13
    已采纳

    因为你在for循环当中,比较字符串的最后一个'\0'的时候,没有跳出循环,导致会比较数组中后面一些无效字符。所以结果可能为-43或其他的。当你比较到最后一个字符都为'\0',此时就应该结束循环,字符串的比较结果就为0;所以只要在循环里面那个比较最后一个字符的时候加一个break就可以了。结束循环不需要在判断flag的值,因为在循环中都已经将比较的结果处理完毕了。

    点赞 评论
  • cj4461285 2013-09-10 02:01

    最后那个不需要加break,你这代码有问题,if(s1[i]==s2[i]=='\0')这句的意思先是判断s1跟s2是否相等,再跟后面的‘\0’比较,所以你这个是进不去,resu没初始化,可以是任意的值;做比较最好用指针表示别用数组,指针好操作些

    点赞 评论
  • lvxinjian_cn 2013-09-10 08:30

    不要用for循环,改成别的试试。而且你的编程思路也不是特别好。

    点赞 评论

相关推荐 更多相似问题