烧饼宇宙第一 2023-02-28 22:57 采纳率: 75.7%
浏览 13
已结题

左叶1结果为什么错误

对一个数组中大于指定数据的过滤,并将过滤后的数据存储到另一个数组中,每组第一行先输入两个整数n和x,5<=n<=100,x为500以内的整数;第二行输入n个1000以内的整数。

output对于每组输入的n个整数,保存并输出n个数中不小于x的所有整数

img

#include <stdio.h>

#include <stdlib.h>

int main( )

{

   int n,i,x,j=0;

   while(scanf("%d %d",&n,&x)!=EOF)

{

   int a[100];

   int b[100]; 

   for( i=0;i<n;i++)

   scanf("%d",&a[i]);

   for(i=0;i<n;i++)

   {if(a[i]>=x)

    b[j++]=a[i];}

   for(i=0;i<j;i++)

    printf("%d ",b[i]);

    printf("\n");

 }

return 0;

}

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-28 23:25
    关注

    基于Monster 组和GPT的调写:
    潜在的问题:

    当处理多组数据时,每次循环开始前,应该将存储结果的数组 b 的索引 j 重置为 0,否则可能会将上一组数据的结果一并输出。
    
    由于指定的数组大小是 100,而题目中规定数组大小范围为 5~100,因此对于 n>100 的情况,该代码可能会发生数组越界的问题。
    
    对于 scanf 函数,当读取到文件结束符 EOF 时,该函数返回 -1,而不是 0。因此,应该使用 while(scanf("%d %d",&n,&x)==2) 来确保每次成功读取了两个整数。
    

    修改:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int n, i, x, j;
        while (scanf("%d %d", &n, &x) == 2) {
            int a[100];
            int b[100];
            j = 0; // 重置索引
            for (i = 0; i < n; i++)
                scanf("%d", &a[i]);
            for (i = 0; i < n; i++) {
                if (a[i] >= x)
                    b[j++] = a[i];
            }
            for (i = 0; i < j; i++)
                printf("%d ", b[i]);
            printf("\n");
        }
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 创建了问题 2月28日

悬赏问题

  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题