C++中,我应该使用什么替代#define?

4
我希望用cin运算符从控制台输入一个值,而不是使用#define N 6。我尝试了一下,但是出现了“表达式必须具有常量值”的错误消息。请问应该如何以其他方式实现呢?
谢谢回答!
示例代码:
#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;
}

4
在 C++ 中,数组的维度不能是运行时变量。请使用 std::vector - user2100815
1个回答

5

定义使用预处理器展开。 实际上,“#define N 6”表示您代码中所有出现的“N”都将被替换为“6”,从而将“cin >> N”替换为“cin >> 6”。

解决方案是将“N”作为变量:

int N;
cin >> N;
// do whatever you want with N

然而需要注意的是,在这种情况下 Person people[N] 是一个变量大小的数组(也就是说,它的大小在编译时不知道),这是非标准的C++语法,应该避免使用。考虑使用标准库中的vector代替——它基本上是一个可变大小的数组。
cin >> N;
vector<Person> people(N);
...
cin >> people[i].name;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接