/* 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,這是為何?求大神幫助。
因為你在for循環當中,比較字符串的最後一個'\0'的時候,沒有跳出循環,導致會比較數組中後面一些無效字符。所以結果可能為-43或其他的。當你比較到最後一個字符都為'\0',此時就應該結束循環,字符串的比較結果就為0;所以只要在循環裡面那個比較最後一個字符的時候加一個break就可以了。結束循環不需要在判斷flag的值,因為在循環中都已經將比較的結果處理完畢了。