c语言习题比较字符串不用strcmp函数

跟我预想的不一样 我不明白为啥我输个等长的并不相等的字符串他为啥会一直循环 而不会跳出;想不明白求解答

img

img


#include
int main ()
{
    char str1[50],str2[50];
    
    int res=0;
        printf("字符串1\n");
        gets(str1);
        printf("字符串2\n");
        gets(str2);
        char *p1=str1,*p2=str2;//p1 p2 指向str1 和str2两个字符串的第一个字符 

    while(*p1!='\0'||*p2!='\0')
    {
        if(*p1>*p2) //如果p1指向当前字符大于p2所指向的字符 若p1指向b p2指向a此时 b大于a 
            { 
                res=*p1-*p2;//结果等于b-a=1 
                break; //跳出循环 
            }
        else if (*p2<*p1)        
            {
                res=*p1-*p2;
                break;
            }
        else//都不满足 
        {
        p1++;
        p2++;     //判断下一字符 
        }
    }
    if(*p1=='\0'&&*p2=='\0')//若p1 和p2 都指向'\0'说明俩字符串等长且相等 
        { 
            printf("两字符串相等");
            res=0;
        } 
    else if(*p1=='\0'&&*p2!='\0')//若p1指向‘\0’而p2指向不是‘\0’ 说明str2长度大于str1且在p1指向/0的位置前 
        {                                                                //两字符完全相等 
            res=-*p2;//res=0-p2指向的字符 
        }
    else if(*p1!='\0'&&*p2=='\0')
        res =*p1;
        printf("\n\n%d",res);                                 
               

    return 0;
}


修改如下,供参考:

#include <stdio.h>
int main ()
{
    char str1[50],str2[50];
    int res=0;
    printf("字符串1\n");
    gets(str1);
    printf("字符串2\n");
    gets(str2);
    char *p1=str1,*p2=str2;//p1 p2 指向str1 和str2两个字符串的第一个字符
    while (*p1 == *p2 && *p1){
        p1++; p2++;
    }
    if (*p1 == '\0' && *p2 == '\0')
        res = 0;
    else
        res = *p1 - *p2;
    printf("%d",res);

#if 0     //以下删除
    while(*p1!='\0'||*p2!='\0')
    {
        if(*p1>*p2) //如果p1指向当前字符大于p2所指向的字符 若p1指向b p2指向a此时 b大于a
            {
                res=*p1-*p2;//结果等于b-a=1
                break; //跳出循环
            }
        else if (*p2<*p1)
            {
                res=*p1-*p2;
                break;
            }
        else//都不满足
        {
        p1++;
        p2++;     //判断下一字符
        }
    }
    if(*p1=='\0'&&*p2=='\0')//若p1 和p2 都指向'\0'说明俩字符串等长且相等
        {
            printf("两字符串相等");
            res=0;
        } 
    else if(*p1=='\0'&&*p2!='\0')//若p1指向‘\0’而p2指向不是‘\0’ 说明str2长度大于str1且在p1指向/0的位置前
        {                                                                //两字符完全相等
            res=-*p2;//res=0-p2指向的字符 
        }
    else if(*p1!='\0'&&*p2=='\0')
        res =*p1;
        printf("\n\n%d",res);
#endif

    return 0;
}