@秋野 2023-03-04 20:41 采纳率: 0%
浏览 26

为什么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 <rnum){
        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//输出

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-04 23:59
    关注

    “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时,程序会退出循环,避免了多输出的情况。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月4日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀