如果我要删除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;
}
}
答案 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);
}