关于#c语言#的问题:程序改错-3从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止

程序改错-3
从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止,然后打印这两个数。
为什么以下两个代码运行结果有区别(第一个正确,第二个错误)
程序正确的运行结果示例:

Input x1, x2:
a,sInput x1, x2:
a,1Input x1, x2:
2,sInput x1, x2:
1,2Input x1, x2:
-1,-2Input x1, x2:
0,3Input x1, x2:
1.2,3.4Input x1, x2:
1.2,5Input x1, x2:
-1,3x1=-1,x2=3

int main()
{
    int x1, x2,n,flag = 0;
    do{
        printf("Input x1, x2:\n");
        n = scanf("%d,%d", &x1, &x2);
        if(n == 2){
            if(x1 * x2 >= 0){
                flag = 1;
            } else{
                flag = 0;
            }
        } else{
            while(getchar() != '\n');
            flag = 1;
        }
    }while (flag);
    printf("x1=%d,x2=%d\n", x1, x2);
    return 0;
}

int main()
{
    int x1, x2,n,flag=0;

    do
    {
        printf("Input x1, x2:\n");
        n=scanf("%d,%d", &x1, &x2);
        if (n==2)
        {
            if(x1*x2>=0)
                flag=1;
            else flag=0;
        }
        else
            flag=1;
    }
    while (flag);
    printf("x1=%d,x2=%d\n", x1, x2);
    return 0;
}

第一个代码正确,第二个代码错误,因为在第二个代码中,当输入的两个数不满足要求时,flag的值被设置为1,而在第一个代码中,当输入的两个数不满足要求时,flag的值被设置为0,这样就可以继续循环,直到输入的两个数满足要求为止。