2401_83920199 2024-04-21 15:22 采纳率: 25%
浏览 4

不知道怎么结束输入,一般要求里面的输入格式没有Ctrl+Z

img


比如这个,需要读入两个数组,我用了do while也没有结束循环,要是结束了循环的话恐怕在第一个数组就结束了。我是初学者自学的,

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-21 15:22
    关注

    引自免费微信小程序:皆我百晓生

    为了帮您解决这个问题,我将首先分析您的代码,然后提供修改后的版本。您的代码有一个逻辑错误,即在do...while循环中使用了scanf()函数,这导致当用户输入0时,程序并没有正确地跳出循环。

    下面是修改后的代码,使用两个嵌套的for循环,分别处理两个多项式,并添加了一个额外的条件来检查是否已经读取到0次幂(即输入结束)。这样,当读取到两个0次幂后,程序会自动退出。

    #include <stdio.h>
    #define SIZE 20
    
    int main() {
        int x, y;
        int xishu1[SIZE], mi1[SIZE];
        int xishu2[SIZE], mi2[SIZE];
    
        // 读入第一个多项式
        for (int i = 0; i < SIZE; ++i) {
            scanf("%d%d", &x, &y);
            if (x == 0 && y == 0) break;
            mi1[i] = x;
            xishu1[i] = y;
        }
    
        // 检查是否已读取到两个0次幂
        if (i >= SIZE - 1) {
            printf("Invalid input: too many non-zero terms.\n");
            return 1;
        }
    
        // 读入第二个多项式
        for (int j = i; j < SIZE; ++j) {
            scanf("%d%d", &x, &y);
            if (x == 0 && y == 0) break;
            mi2[j] = x;
            xishu2[j] = y;
        }
    
        // 检查是否已读取到两个0次幂
        if (j >= SIZE - 1) {
            printf("Invalid input: too many non-zero terms.\n");
            return 1;
        }
    
        // 计算和并输出结果
        printf("Result:\n");
        for (int k = 0; k <= i; ++k) {
            if (xishu1[k] + xishu2[k] != 0) {
                printf("%dx^%d", xishu1[k] + xishu2[k], mi1[k]);
                if (k < i) printf("+");
            }
        }
        printf("\n");
    
        return 0;
    }
    

    这段代码应该能解决您的问题。当用户输入两个多项式后,它会计算它们的和并按照题目要求的格式输出结果。如果输入的多项式超出规定的幕次数(即超过100),程序会提示"Invalid input: too many non-zero terms."。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月21日