C ++ опережает #define - PullRequest
       17

C ++ опережает #define

0 голосов
/ 12 мая 2018

У меня есть этот код:

#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;
}

Я хотел бы дать значение переменной (из консоли ..) с помощью "cin >>", перед использованием #define N 6. Я пробовал, но я получаю сообщение об ошибке «выражение должно иметь постоянное значение». Как мне тогда поступить?

1 Ответ

0 голосов
/ 12 мая 2018

Определения развернуты с препроцессором.Фактически, #define N 6 означает, что все вхождения N в вашем коде будут заменены на 6, таким образом, заменив cin >> N на cin >> 6.

Решение состоит в том, чтобы N aпеременная:

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;
...