2016-04-06 35 views
0

我是社区和编码的新手。现在我正在学习CC的计算机科学入门课程,我们正在学习C++。无论如何,我必须创建一个程序,要求用户输入一个数字,这将是数组new_array的大小指示器。程序然后要求用户逐一输入数字,然后反向输出。 #include using namespace std;C++:使用for循环来允许用户输入数组到数组

int main() 
{ 
cout << "How many numbers?\n"; 
int numbers; // holds amount of numbers to be entered into array 
cin >> numbers; 
int new_array[numbers]; 
for(int counter = 0; counter < numbers; counter++) 
{ 
    cout << "Enter number " << counter << endl; 
    cin >> new_array[counter]; 
} 

cout << "You entered: " << endl; 

for(int i = numbers; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 

} 

return 0; 
} 

我明白如何做到这一点,并在大多数情况下,我的程序工作。它输出反向输入的数字,但在输出之前,它会输出大的奇怪数字。例如,如果用户输入5作为要输入的数字的量,然后分别进入1, 2, 3, 46作为5号码,该程序输出数4669476第一,然后反向阵列中输出的数字。任何人都可以向我解释我做错了什么,我该如何解决这个问题?先进的谢谢! PS要温柔!我是一个新手

回答

1

此循环读取出界:

for(int i = numbers; i >= 0 ; i--) 
{ 

如果按照i通过在你的头上,你会看到你的输出项numbers通过对0的时候,其实你应该输出项numbers-1通过对0

另一种模式是:

for(int i = numbers; i--;) 

或者你可以使用传说中的--> operator

可以“简单”从numbers - 1开始,但是您使用的循环模式不适用于无符号计数器(因为它们始终为>= 0)。恕我直言,这是一个好主意,使用适用于所有类型的模式;那么你将来不太可能犯错。

0

在你的显示器for loop中,你从i = numbers开始,它超出了数组的范围。由于阵列从0 till size - 1开始,那么您需要从i = numbers - 1开始一直到>=0

0

因为你从没有定义array[numbers]启动。

array[0], array[1], ... array[numbers-1]定义。

0

在C数组是从0而不是1所以最后一个数字被存储在array[4]

存储因此,当你写出来,你应该开始一个numbers - 1,而不是仅仅numbers

0

因为你是从超出范围给你的垃圾值开始的索引。

你的代码应该是一些这样的事

for(int i = numbers-1; i >= 0 ; i--) 
{ 
    cout << new_array[i] << endl; 
    }