程序错误中出现随机整数
Random Integers Appearing In Program Bug
所以我正在尝试编写一个程序,将一个整数数组分成两个,一个用于偶数整数,一个用于不均匀整数。现在,奇怪的是,如果我只在基本数组中输入偶数或奇数,程序运行正常,但如果我输入两者的混合,两个新数组保存的值之一将是随机的,通常是负数,很大的数字,知道为什么吗?
#include <iostream>
using namespace std;
void main()
{
int *a, n, *even_nums = 0, *uneven_nums = 0, counter_even = 0,counter_uneven = 0;
cout << "How many values does your array have?\n" << endl;
cin >> n;
a = new int[n];
cout << "\nEnter the values in your array:" << endl;
for (int i = 0; i < n; i++)
{
cout << "a[" << i << "] = ";
cin >> a[i];
if (a[i] % 2 == 0)
counter_even++;
else
counter_uneven++;
}
if (counter_even == 0)
cout << "There are no even numbers in your array." << endl;
else
even_nums = new int[counter_even];
if (counter_uneven == 0)
cout << "There are no uneven numbers in your array." << endl;
else
uneven_nums = new int[counter_uneven];
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[i] = a[i];
else
uneven_nums[i] = a[i];
}
if (counter_even != 0)
{
cout << "\nThe even numbers in your array are:" << endl;
for (int i = 0; i < counter_even; i++)
cout << even_nums[i] << " ";
}
if (counter_uneven != 0)
{
cout << "\nThe uneven numbers in your array are:" << endl;
for (int i = 0; i < counter_uneven; i++)
cout << uneven_nums[i] << " ";
}
system("PAUSE");
}
在街区
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[i] = a[i];
else
uneven_nums[i] = a[i];
}
您正在使用 i
作为数组 a
、even_nums
和 uneven_nums
的相同索引。您需要为这些数组使用单独的索引。
例如,如果您有 n=10 个元素,5 个偶数和 5 个奇数,则您的 even_nums
和 uneven_nums
各只包含 5 个元素。
在
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[i] = a[i];
else
uneven_nums[i] = a[i];
}
您对所有数组使用了相同的索引。这将不起作用,因为 even_nums
和 uneven_nums
将小于 a
如果两者都有。你最终会写到数组的末尾,即 undefined behavior.
您需要做的是为每个数组添加一个索引,并且每次您向数组中插入一个元素时都会推进该索引。
for (int i = 0, u = 0, e = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[e++] = a[i];
else
uneven_nums[u++] = a[i];
}
此外,您使用的 void main()
不是标准的,不应使用。 int main()
和 int main(int argc, char** argv)
是 main()
的标准可接受签名
所以我正在尝试编写一个程序,将一个整数数组分成两个,一个用于偶数整数,一个用于不均匀整数。现在,奇怪的是,如果我只在基本数组中输入偶数或奇数,程序运行正常,但如果我输入两者的混合,两个新数组保存的值之一将是随机的,通常是负数,很大的数字,知道为什么吗?
#include <iostream>
using namespace std;
void main()
{
int *a, n, *even_nums = 0, *uneven_nums = 0, counter_even = 0,counter_uneven = 0;
cout << "How many values does your array have?\n" << endl;
cin >> n;
a = new int[n];
cout << "\nEnter the values in your array:" << endl;
for (int i = 0; i < n; i++)
{
cout << "a[" << i << "] = ";
cin >> a[i];
if (a[i] % 2 == 0)
counter_even++;
else
counter_uneven++;
}
if (counter_even == 0)
cout << "There are no even numbers in your array." << endl;
else
even_nums = new int[counter_even];
if (counter_uneven == 0)
cout << "There are no uneven numbers in your array." << endl;
else
uneven_nums = new int[counter_uneven];
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[i] = a[i];
else
uneven_nums[i] = a[i];
}
if (counter_even != 0)
{
cout << "\nThe even numbers in your array are:" << endl;
for (int i = 0; i < counter_even; i++)
cout << even_nums[i] << " ";
}
if (counter_uneven != 0)
{
cout << "\nThe uneven numbers in your array are:" << endl;
for (int i = 0; i < counter_uneven; i++)
cout << uneven_nums[i] << " ";
}
system("PAUSE");
}
在街区
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[i] = a[i];
else
uneven_nums[i] = a[i];
}
您正在使用 i
作为数组 a
、even_nums
和 uneven_nums
的相同索引。您需要为这些数组使用单独的索引。
例如,如果您有 n=10 个元素,5 个偶数和 5 个奇数,则您的 even_nums
和 uneven_nums
各只包含 5 个元素。
在
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[i] = a[i];
else
uneven_nums[i] = a[i];
}
您对所有数组使用了相同的索引。这将不起作用,因为 even_nums
和 uneven_nums
将小于 a
如果两者都有。你最终会写到数组的末尾,即 undefined behavior.
您需要做的是为每个数组添加一个索引,并且每次您向数组中插入一个元素时都会推进该索引。
for (int i = 0, u = 0, e = 0; i < n; i++)
{
if (a[i] % 2 == 0)
even_nums[e++] = a[i];
else
uneven_nums[u++] = a[i];
}
此外,您使用的 void main()
不是标准的,不应使用。 int main()
和 int main(int argc, char** argv)
是 main()