[我被要求编写一个程序,要求一个整数'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);
}
您声明
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])
这些问题中的任何一个都可能是您观察到的巨大数字的解释,有时这是使用未初始化变量或非法访问内存的内容的症状。