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

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的值,因为在循环中都已经将比较的结果处理完毕了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python