带有指针的计算机实验室
computer lab with pointers
我有管理计算机实验室的任务。具体来说,有4个实验室,每个实验室都有不同数量的计算机。因此,我想创建一个带有指针的 2D 数组,但在尝试了不同的东西之后,我指望你解决这个错误(请!!(。以下是我程序的一部分,直到出现烦人的错误。
我在 1 次运行后出现运行时错误(在抛出std::bad_array_new_length what(): std::bad_array_new_length
实例后调用终止(,当我在这里留下带有注释//PROBLEM 的行时。
在实验室前面添加一个&,编译器给了我一个错误:左值需要作为赋值的左操作数。
新手在C++,第一次使用指针,我将不胜感激任何帮助。
#include <iostream>
using namespace std;
//Global variables
const int SIZE = 4;
typedef int* Stations;
Stations *labroom;
//Function declaration:
void numberOfComputers();//Receive number of computers in each lab
int menu();//Display menu options for users
void menu_processor(int option);//process user's option
int main()
{
numberOfComputers();
menu();
menu_processor(menu());
return 0;
}
void numberOfComputers ()
{ char ans;
for (int i=0;i<SIZE;i++)
{
cout<<"Enter the number of computer stations in lab "<<i+1<<": ";
do
{
cin.get(ans);
} while (ans!='n');
labroom [i] = new int [ans-'0'];//PROBLEM HERE
cout<<"n";
}
}
这不是 c++ 代码,它只是(丑陋的(C。
在C++中,我们为静态数组提供了array
,为动态数组提供了vector
。
首先,以聪明的方式选择变量或函数的名称:更喜欢getNumberOfComputersFromUser
而不是numberOfComputers
。numberOfComputers
是什么意思?函数名称必须描述它正在执行的操作。
这里有一个简化的片段:
#include <vector>
#include <array>
#include <iostream>
using namespace std;
using Station = int;
using LabRooms = array<vector<Station>, 4>;
LabRooms getNumberOfComputersFromUser()
{
LabRooms labRooms;
int roomIndex = 0;
for(auto& computersInLab : labRooms)
{
cout << "Enter the number of computer stations in lab " << ++roomIndex << ": ";
auto computerCount = 0;
cin >> computerCount;
computersInLab.resize(computerCount);
}
return labRooms;
}
解释
array
需要两个模板参数:类型和大小。元素是静态分配的,无需新建,因为我们已经知道我们有多少房间。每个房间的计算机列表是未知的,所以我们使用可以动态增加或减少的vector
。
using LabRooms = array<vector<Station>, 4>;
和typedef array<vector<Station>, 4> LabRooms
是一样的,但我认为更清楚
for( auto& computersInLab : labRooms)
遍历labRooms
并获取对其元素的引用(在本例中为对Station
vector
的引用。这与以下内容相同:
for(int i = 0; i < labRooms.size(); ++i)
{
auto& computersInLab = labRooms[i];
...
}
computersInLab.resize(computerCount);
使用用户指定的值调整计算机列表的大小。
现在,labRooms
是一个由 4 个元素组成的数组,每个元素都是一个Station
列表。
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 我可以使用任何好的逻辑来阻止计算机将 O 放在井字游戏中的现有 X 上
- C++ 计算机猜测用户数量在 7 次猜测以内
- C++为什么我的编译器成功了,但我的计算机给出了调试错误?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 如何在个人计算机和群集 (c++) 上生成相同的随机数
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 预处理的 C/C++ 文件是否特定于计算机?
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- 在多 GPU 计算机中查找空闲 GPU
- 我该如何编码,使计算机知道两个名称条目和三个名称条目之间的区别
- 从C++中的主机名获取计算机名
- 我的C++程序如何访问计算机的日期和时间以打印和使用当前年份?
- 如何使Visual Studio 2017 C++项目在计算机之间更具可移植性
- 带有指针的计算机实验室