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

时间:2015-10-25 22:59:16

标签: c++ arrays multidimensional-array ifstream ofstream

我已经在这个C ++项目上工作了大约两个星期了,我对2D阵列的一些事情感到难过。从这里开始是我现在写的代码:

http://pastebin.com/vCsz947Q

我决定将它作为pastebin链接提供,因为它相当大(它使用了8个函数),我认为这样可以节省空间。我是这个网站的新用户,所以如果有一种我不了解的更好的方式,我会道歉。

问题:

当我使用我创建的“保存座位”功能将我的“char座位”数组保存到.dat文件时,我得到一个文件,它给了我以下垃圾字符“Ì”而不是预期的'# '(开放座位)或'*'(如果购买座位)。

尽管如此,我的函数将保存预期的行数(15)和列数(30)。当我在文件中的这个程序中“购买一个座位”时,也会放置一个星号。另外,我的程序按预期加载文件,除了......嗯......座位数组中存有垃圾数据。

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

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

感谢您的帮助,无论谁提供帮助。

1 个答案:

答案 0 :(得分:1)

首先,您在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而不是数组。这将为您提供更多的空间,以确定您在实用程序函数中使用的数组的项目的维度,从而减少阵列访问中出错的可能性。