首页 > 解决方案 > C++ 我应该用什么来代替#define

问题描述

我想用 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;
}

标签: c++expressionconstants

解决方案


使用预处理器展开定义。实际上,#define N 6意味着N代码中所有出现的 都将替换为6,因此替换cin >> Ncin >> 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;

推荐阅读