c++多维数组保存/加载到文件错误

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

本文关键字:加载 文件 错误 保存 数组 c++      更新时间:2023-10-16

我已经在这个c++项目上工作了大约2周了,我被一些关于2D数组的事情难住了。下面是我现在写的代码:

http://pastebin.com/vCsz947Q

我决定提供这个链接,因为它相当大(它使用8个函数),我认为它会节省空间在这篇文章。我是这个网站的新手,所以我很抱歉,如果有更好的方法,我不知道。

问题:

当我使用我创建的"save seats"函数将我的"char seats"数组保存到一个.dat文件时,我得到一个文件,它给了我下面的垃圾字符"Ì",而不是预期的"#"(表示开放的座位)或"*"(如果座位已购买)。

尽管如此,我的函数将保存预期数量的行(15)和列(30)。此外,当我在文件中进入该程序的"购买座位"时,将会放置一个星号。此外,我的程序按预期加载文件,除了…嗯…座椅阵列中存储了垃圾数据。

我觉得这与我遇到的另一个问题有关,如果我去"购买座位"功能,我说购买座位,它应该用*代替#,但它没有,但在保存的文件中,它会在预定的位置显示一个星号……这很奇怪。

我完全不知道为什么会发生这种情况,令人沮丧的是这一件事阻止了我完成这个节目。我想相信我在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而不是数组。这将为您提供更多的空间来确定您在实用程序函数中使用的数组项的维度,并减少数组访问中出现错误的可能性。