C++ 多维数组 saving/loading 到文件错误

C++ Multi-Dimensional Array saving/loading to file error

我已经在这个 C++ 项目上工作了大约 2 周,但我对一些关于 2D 数组的事情感到困惑。从这里开始是我现在编写的代码:

http://pastebin.com/vCsz947Q

我决定将它作为一个 pastebin link 提供,因为它相当大(它使用 8 个函数)并且我认为它会在这个 post 中节省 space .我是这个网站的新手,所以如果有我不知道的更好的方法,我深表歉意。

问题:

当我使用我创建的 "save seats" 函数将 "char seating" 数组保存到 .dat 文件时,我得到一个文件,其中包含以下垃圾字符“Ì”,而不是预期的“#”(空位)或“*”(如果已购买座位)。

尽管如此,我的函数仍将保存预期数量的行 (15) 和列 (30)。当我在文件中的这个程序中转到 "purchase a seat" 时,也会放置一个星号。此外,我的程序按预期加载文件,除了......嗯......座位数组中存储了垃圾数据。

我觉得这与我遇到的另一个问题有关,如果我转到 "purchase seats" 功能并且我说要购买一个座位,它应该用 * 替换 #,但它没有' t,但在保存的文件中,它会在预期的位置显示一个星号...这很奇怪。

我完全不知道为什么会这样,令人沮丧的是这一件事阻止了我完成这个程序。我想相信我在其他函数调用的 int main 中的原始数组没有正确更新,但我不知道,这就是我来这里寻求帮助的原因。

谢谢大家的帮助。

首先,您的 displaySeatingChart (char displaySeats[ ][30], float displayPrices[ ]) 函数中有一些未定义的行为,如下所示:

const int rowDisplay = 15;
const int colDisplay = 30;

稍后在你的一个循环中你有

cout << displaySeats[rowDisplay][colDisplay];

这显然超出了数组边界,因为在 main() 中您定义了

const int rowMain = 15;
const int colMain = 30;
char seating[rowMain][colMain];
float seatPrices[15];

并将 seatingseatPrices 都传递给 displaySeats 函数。您的代码可能还有其他问题,但这至少是未定义行为的明显示例。考虑使用调试器单步执行代码,以更清楚地了解问题的根源。

另一个注意事项,鉴于您正在使用 C++,请考虑使用 std::vector 而不是数组。这将为您提供更多范围来确定您在实用程序函数中使用的数组项的维度,并减少数组访问错误的可能性。