c++ - 阅读简单的 .txt 时,我得到了垃圾值
问题描述
我正在制作一个游戏,我想从 .txt 中读取怪物的属性。当我读取文件并将值放入变量时,这些变量会获取垃圾数据而不是 .txt 数据。这很奇怪,因为它只发生在我的主要项目中。我用相同的类创建了一个测试项目,并从字面上复制粘贴了代码,它在那里完美运行。
这是我的文件读取方法:
void Game::readMonsters() {
string monsterName, monsterFile = "";
int life, def, id = NULL;
ifstream monsters("assets/monsters.txt");
if (monsters) {
monsters >> nMonsterTypes; // this variable exists in Game.h
type = new MonsterType[nMonsterTypes](); // this object exists in Game.h
for (int i = 0; i < nMonsterTypes; i++) {
// all those variables are being set as memory garbage:
monsters >> id;
type[i].setID(id);
monsters >> life;
type[i].setHP(life);
monsters >> def;
type[i].setDefense(def);
monsters >> monsterFile;
type[i].setFile(monsterFile);
monsters >> monsterName;
type[i].setName(monsterName);
}
}
monsters.close();
}
我很感激任何帮助!
解决方案
在 Visual Studio 中使用断点,我注意到错误不在读取中,而是在“类型”数组的 get 方法中。当我应该在 0 和 nMonsterTypes - 1 之间(选择数组中的随机位置)时,我在 0 和 nMonsterTypes 之间做一个 rand。不过在这里得到了很好的建议,谢谢大家!
推荐阅读
- kubernetes - Kubernetes 日志拆分(Stdout/Stderr)
- excel - 使用 =IIF 计算小时数,但我需要使用多个 IIF 并且它不断崩溃
- ms-access - MS Access 查询是否有任何更简单的方法可以从具有多个 LEFT JOIN 的多个列中获取 MAX 值
- ios - Coremltools:不能在后续层中使用来自非最大抑制层的一些输出
- android - 如何从 Android MVVM 架构中的 LiveData 列表中获取第一个或(任何)元素?
- flutter - Flutter 将数据传递给 Stateful Widget
- r - 尽管使用 as.ts 指定它,但频率并未反映在时间序列对象 R 中
- c - 从多宿主计算机发送多播 udp
- php - 重复键更新 sql 查询的正确格式是什么?看起来像拼写错误或缺少某些东西
- c - 了解文件描述符的 Glib 轮询系统