我正在尝试我的代码的第一部分,我试图消除所有数字,直到输入的数字可被2整除而不使用(向量,除法或模数)
#include <iostream>
using namespace std;
int main()
{
int num;
int array [num];
cout << "Please enter a number" << endl;
cin >> num;
cout << endl;
if(num == 0)
{
return 0;
}
int var = 2;
int check;
for(int x = 0; x < num;x++)
{
array[x] = var;
check = var;
while(check > 0) // This loop checks if a number is divisible by 2
{
check = var - 2;
}
if(check == 0)
{
array[x] = 0;
}
else
{
cout << array[x];
}
var++;
}
}
答案 0 :(得分:2)
int array [num];
理想情况下,这应该生成一个类似于:
的编译器警告ISO C ++禁止可变大小数组
请注意,代码中的上述行不一定会使您进入未定义的行为区域。您位于实施定义的区域中。 现在,为什么你的代码失败了,因为num未初始化。这是未定义的行为。因此,您的代码显示随机行为并不令人惊讶。 将数组的定义移动到输入num的点之下将起作用 虽然如果你真的想要一个可变大小的数组,希望你的代码可以跨编译器移植,那么就把它分配到堆上。
cin >> num;
int *array = new int[num]; // don't forget to delete this, or even better use unique_ptr
更好的是std :: vector然后问题对其使用施加了人为的限制。
另请将array
变量重命名为其他内容。 c ++ 11有一个具有相同名称的标准容器。