我已经创建了一个简单的程序,但是有些错误

时间:2018-06-27 10:03:31

标签: c++

如果我要删除for循环条件上的“ =”符号,它将起作用。但是,当我向其添加等号时,它将在第一个循环后崩溃。综上所述,第一个循环将起作用,但第二个循环将不起作用。请帮助,谢谢!

#include <iostream>
#include <cstdlib>

using namespace std;

int main() {

  int arrayValue;

  cout << "Enter an array value: ";
  cin >> arrayValue;
  cout << endl;

  string names[arrayValue];

  for (int x = 0; x <= arrayValue; x++) {
    cout << "Enter a name for no." << x << ": ";
    cin >> names[x];
  }

  cout << "No."
       << "  ------  "
       << "Value" << endl;

  for (int j = 0; j <= arrayValue; j++) {
    cout << j << "  ------  " << names[j] << endl;
  }
}

2 个答案:

答案 0 :(得分:0)

您必须知道,数组从0开始,因此,要访问数组值,必须从0迭代到size-1。

这是您的问题,当您放置<=时,您将迭代直到大小,而不是直到最后一个位置。

因此,总而言之,当您迭代数组时,必须覆盖以0开头的位置,因此使用i

答案 1 :(得分:0)

字符串名称[arrayValue];不能按照您的意图工作,必须在运行程序之前使用固定大小初始化数组。您程序的可能解决方案可能是

const uint32_t maxSize = 1024; // 1024 being a upper limit
string names[maxSize];

for (int x = 0; x <= arrayValue; x++) {
    if (x >= (maxSize - 1)) // remember a array of size 1024 goes from 0 to 1023 
        break;
    cout << "Enter a name for no." << x << ": ";
    cin >> names[x];
}

没有if-check的另一种编写方式:

for (int x = 0; x <= arrayValue && x < maxSize; x++) 

或者您可以使用向量(向量是可以增长和收缩的动态数组):

#include <vector>
vector<string> names;

for (int x = 0; x <= arrayValue; x++) {
    cout << "Enter a name for no." << x << ": ";
    string n;
    cin >> n;
    names.push_back(n);
}