使用数组在C上打印偶数和奇数时输出巨大的数字

问题描述 投票:3回答:1

[我被要求编写一个程序,要求一个整数'n',然后扫描'n'个整数,然后对这些整数进行排序并打印为偶数,升序,奇数,降序。

因此,我首先在数组的第一列中添加了偶数,然后在第二列中添加了奇数,然后打印它们,但最后我得到的只是巨大的相似数字,而不是我最初输入的值。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int array1_size, unfill;
  printf("How many integers do you wish to enter?\n");
  scanf("%d",&array1_size);
  int array1[array1_size][2];

  for (int i = 0; i < array1_size; ++i)
  {
    printf("Enter integer number %d\n", i+1);
    scanf("%d",&array1[i][0]);
  }

  for (int i = 0; i < array1_size; ++i)
  {
   if ( (array1[i][0] % 2) != 0 )
    {
      array1[i][1] = array1[i][0];
      array1[i][0] = unfill;
    }
  }

  printf("Your even numbers are:\n");
  for (int i = 0; i < array1_size; ++i)
  {
    printf("%d\n", array1[array1_size][0]);
  }

  printf("...and your odd numbers are:\n");
  for (int i = 0; i < array1_size; ++i)
  {
    printf("%d\n", array1[array1_size][1]);
  }

  return(0);
}
c arrays sorting output
1个回答
1
投票

您声明

int array1[array1_size][2];

内部可合法访问的最高索引元素

array1[array1_size-1][2-1]

因此,此行高度可疑

printf("%d\n", array1[array1_size][1]);

此外,您不初始化unfill,但将其内容复制到其他位置

array1[i][0] = unfill

您可能会保留未初始化的任何array1[i][0]的内容,因为失败的scanf()会使您的代码易受攻击,因为在这里您忽略了通常非常有用的返回值,当扫描出问题时,该返回值可能会警告您。

scanf("%d",&array1[i][0])

这些问题中的任何一个都可能是您观察到的巨大数字的解释,有时这是使用未初始化变量或非法访问内存的内容的症状。

© www.soinside.com 2019 - 2024. All rights reserved.