我是一个新手,几天前开始写代码。所以今天开始对数组和有一些疑问。我正在阅读一个数组,从用户输入并显示它,一切运行正常,但在输出屏幕上,我有一个垃圾值,不知道为什么。请帮帮我
#include <iostream>
using namespace std;
int main(){
int number;
cout<<"Enter a array_size"<<endl;
cin>>number;
//Reading and printing array
int array[number];
int i=1;
while(i<=number){
cin>>array[i];
i++;
}
//printing array
int j=0;
while(j<=number){
cout<<array[j]<<endl;
j++;
}
}
预期输出:从用户阅读:3
1
2
3
//displaying
1
2
3
实际结果:从用户阅读:3
1
2
3
16
1
2
3
为什么16号会出现?
4条答案
按热度按时间bkkx9g8r1#
如注解中所述,c不支持VLA(可变长度数组)-请参阅此处:Why aren't variable-length arrays part of the C++ standard?。
前面已经提到数组索引从0开始,而不是1(Array indexing starting at a number not 0)。
您可以使用
std::vector
和ranged-based loops(后者从c11开始可用)来避免这些问题。您案例代码示例:
请注意,
auto elem : array
(没有&
)不会工作,因为auto
本身不会推断引用,而是复制元素。**旁注:**最好避免
using namespace std
-参见:Why is "using namespace std;" considered bad practice?。sy5wg1nm2#
你的代码有两个问题。
首先
int array[number];
不是标准的c++,因为number
不是常量表达式。其次,数组索引从
0
开始,而不是c++中的1
。也有许多其他职位描述这些问题。
Array index always start at 0
Why accessing out of bound array does not give any error
xjreopfe3#
数组应该始终从索引0开始。更新起始索引和条件。
cbjzeqam4#
数组索引从0开始,而不是从1开始。
更正代码:
在这里使用for循环更符合习惯: