我有这段代码:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#define N 6
using namespace std;
typedef struct person {
int roll;
string name;
} Person;
int main() {
int numberofperson;
cout << "Number of people: "; cin >> numberofperson;
srand(time(NULL));
Person people[N];
int i;
for (i = 0; i < numberofperson; i++) {
cout << "Write the " << i + 1 << ". name of the person: ";
cin >> people[i].name;
people[i].roll = rand() % 6 + 1;
cout << "Roll with dice: " << people[i].roll<<endl;
}
return 0;
}
我希望在使用#define N 6之前使用&#34; cin&gt;&gt;&#34;给出变量值(来自控制台..)。 我尝试了但是,我得到一个&#34;表达式必须具有恒定的价值&#34;错误信息。 那我该怎么办呢?
答案 0 :(得分:2)
使用预处理器展开定义。实际上,#define N 6
表示代码中出现的所有N
都会被6
替换,从而将cin >> N
替换为cin >> 6
。
解决方案是使N
变量:
int N;
cin >> N;
// do whatever you want with N
但是,请注意,在这种情况下,Person people[N]
是一个可变大小的数组(也就是说,它的大小在编译期间是未知的。它是非标准的C ++,你应该避免使用它。考虑使用{{而不是 - 它基本上是标准库中可变大小的数组。
cin >> N;
vector<Person> people(N);
...
cin >> people[i].name;