C语言版本号比较,代码过不了


# include <stdio.h>
int compareVersion(char *version1, char *version2);

int main()
{
    int rst = 0;
    char ver1[101];
    char ver2[101];

    scanf("%s %s", ver1, ver2);
    rst = compareVersion(ver1, ver2);        //goal function

    switch (rst)
    {
        case 0:
            printf("The same version.");
            break;
        case 1:
            printf("%s is the new version.", ver1);
            break;
        case -1:
            printf("%s is the new version.", ver2);
            break;
        default:
            printf("invalid!");
            break;
    }

    return 0;
}
int compareVersion(char *version1, char *version2){
    int i,j,len;
    for(i=0,j=0;i<strlen(version1)&&j<strlen(version2);){
        int v1=0,v2=0;
        while(i<strlen(version1)&&version1[i]!='.'){
            v1=v1*10+(version1[i]-'0');
            ++i;
            
        }
        ++i;     //小数点所占位
        while(j<strlen(version2)&&version2[j]!='.') {
            v2=v2*10+(version2[j]-'0');
            ++j;
            
        }
        ++j;     //小数点占位
        if(v1>v2){
            return 1;
        }
        if(v1<v2){
            return -1;
        }
    }
    return 0;
}

img


图片是我加了printf的输出,它从花圈的那里不懂为什么就这样了。

可能是int整数类型溢出了。
把int都改成long long 试试。
希望对题主有所帮助,望采纳!

int ver1和ver2超出了int范围了,改成long long就可以了


#include <stdio.h>
#include <string.h>
int compareVersion(char *version1, char *version2);

int main()
{
    int rst = 0;
    char ver1[101];
    char ver2[101];

    scanf("%s %s", ver1, ver2);
    rst = compareVersion(ver1, ver2);        //goal function

    switch (rst)
    {
    case 0:
        printf("The same version.");
        break;
    case 1:
        printf("%s is the new version.", ver1);
        break;
    case -1:
        printf("%s is the new version.", ver2);
        break;
    default:
        printf("invalid!");
        break;
    }

    return 0;
}
int compareVersion(char *version1, char *version2){
    int i,j,len;
    for(i=0,j=0;i<strlen(version1)&&j<strlen(version2);){
        long long v1=0,v2=0;
        while(i<strlen(version1)&&version1[i]!='.'){
            v1=v1*10+(version1[i]-'0');
            ++i;

        }
        ++i;     //小数点所占位
        while(j<strlen(version2)&&version2[j]!='.') {
            v2=v2*10+(version2[j]-'0');
            ++j;

        }
        ++j;     //小数点占位
        if(v1>v2){
            return 1;
        }
        if(v1<v2){
            return -1;
        }
    }
    return 0;
}