c++ 阅读和打印数组时出现问题

z0qdvdin  于 2023-05-20  发布在  其他
关注(0)|答案(4)|浏览(109)

我是一个新手,几天前开始写代码。所以今天开始对数组和有一些疑问。我正在阅读一个数组,从用户输入并显示它,一切运行正常,但在输出屏幕上,我有一个垃圾值,不知道为什么。请帮帮我

#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号会出现?

bkkx9g8r

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::vectorranged-based loops(后者从c
11开始可用)来避免这些问题。

您案例代码示例:

#include <iostream>
#include <vector>

int main()
{
    int number;
    std::cout << "Enter a array_size" << std::endl;
    std::cin >> number;

    // Read:
    std::vector<int> array(number);
    for (auto& elem : array)
    {
        std::cin >> elem;
    }

    // Print:
    for (auto const & elem : array)
    {
        std::cout << elem << std::endl;
    }
}

请注意,auto elem : array(没有&)不会工作,因为auto本身不会推断引用,而是复制元素。

**旁注:**最好避免using namespace std-参见:Why is "using namespace std;" considered bad practice?

sy5wg1nm

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

xjreopfe

xjreopfe3#

数组应该始终从索引0开始。更新起始索引和条件。

//Reading and printing array
int array[number];  
int i=0; // should start with zero.
while(i<number){  // should be less than only since you start with zero.
    cin>>array[i];
    
    i++;

}
//printing array
int j=0;
while(j<number){   // should be less than only since you start with zero.
    cout<<array[j]<<endl;
    j++;
}
cbjzeqam

cbjzeqam4#

数组索引从0开始,而不是从1开始。
更正代码:

//Reading and printing array
  int array[number];
  int i = 0;
  while (i < number) {
    cin >> array[i];
    i++;
  }

  //printing array
  int j = 0;
  while (j < number) {
    cout << array[j] << endl;
    j++;
  }

在这里使用for循环更符合习惯:

//Reading and printing array
  int array[number];

  for (int i = 0; i < number; i++) {
    cin >> array[i];
  }

  //printing array
  for (int i = 0; i < number; i++) {
    cout << array[j] << endl;
  }

相关问题