问题描述
- 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]=='')
{
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,这是为何?求大神帮助。
解决方案
因为你在for循环当中,比较字符串的最后一个''的时候,没有跳出循环,导致会比较数组中后面一些无效字符。所以结果可能为-43或其他的。当你比较到最后一个字符都为'',此时就应该结束循环,字符串的比较结果就为0;所以只要在循环里面那个比较最后一个字符的时候加一个break就可以了。结束循环不需要在判断flag的值,因为在循环中都已经将比较的结果处理完毕了。
解决方案二:
最后那个不需要加break,你这代码有问题,if(s1[i]==s2[i]=='')这句的意思先是判断s1跟s2是否相等,再跟后面的‘’比较,所以你这个是进不去,resu没初始化,可以是任意的值;做比较最好用指针表示别用数组,指针好操作些
解决方案三:
不要用for循环,改成别的试试。而且你的编程思路也不是特别好。
时间: 2024-11-02 13:42:18