c++ - 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;
}
解决方案
使用预处理器展开定义。实际上,#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;
推荐阅读
- python - GridSearchCV' 对象没有属性 'best_score_'
- python - 如何防止pyinstaller创建的exe被Antivirus删除?
- python - 在数据框列上分配交替值
- php - 通过 PHP 从 DDBB 中删除行
- sql - SQL Server - 按它们再次发生之前发生的第一个日期对值进行分组的有效方法
- javascript - 如何在内存游戏卡中制作完美的重新加载或重置功能?
- python - Digitalocean 托管数据库 [无法创建 SSL 上下文:库没有密码]
- r - 从 R 在 JSON 对象中写入 NULL
- mysql - 为什么不能将数据加载到mysql中:
- javascript - 来自 Fetch() 的响应未定义