为什么c++会多输出一行

代码目的实现左边升序,右边降序,但结果为什么会多输出一行输入信息

bool comp(int lnum,int rnum){
    if(lnum %2 == 0 && rnum%2 ==1){
        return true;
    } else if(lnum %2 == 0 && rnum %2 == 0 && lnum return true;
    } else if(lnum %2 == 1 && rnum%2 == 1 && lnum >rnum){
        return true;
    } else{
        return false;
    }
}

void sortnum(){
    int arr[10];
    while (scanf("%d%d%d%d%d",arr,arr+1,arr+2,arr+3,arr+4) != EOF){
        sort(arr,arr+5, comp);

        for (int i= 0;i<5;i++){
            printf("%d ",arr[i]);
        }
        printf("\n");
    }
}
int main() {
//    std::cout << "Hello, World!" << std::endl;
    system("chcp 65001");
    sortnum();
    return 0;
}

1 4 2 5 2//输入
1 4 2 5 2
2 2 4 5 1//输出

“Devil组”引证GPT后的撰写:
在代码中,每次输入一组数字后,会调用sort函数进行排序,并将结果输出。然而,由于输入的数字不止一组,因此在输入完最后一组数字后,程序会再次调用sort函数进行一次排序并输出结果,这就是多输出的原因。

要解决这个问题,可以在while循环中添加一个判断条件,当输入的数字不满足要求时,退出循环,即可避免多输出的情况。例如:

void sortnum(){
int arr[10];
while (scanf("%d%d%d%d%d",arr,arr+1,arr+2,arr+3,arr+4) != EOF){
if(arr[0]==-1 && arr[1]==-1 && arr[2]==-1 && arr[3]==-1 && arr[4]==-1){
break;
}
sort(arr,arr+5, comp);
    for (int i= 0;i<5;i++){
        printf("%d ",arr[i]);
    }
    printf("\n");
}
}

在这个例子中,当输入的5个数字都为-1时,程序会退出循环,避免了多输出的情况。