c++多维数组保存/加载到文件错误
C++ Multi-Dimensional Array saving/loading to file error
我已经在这个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];
并将seating
和seatPrices
传递给displaySeats
函数。你的代码可能还有其他问题,但这至少是一个未定义行为的清晰例子。考虑使用调试器逐步检查代码,以便更清楚地了解问题的根源。
另一个注意事项,如果你正在使用c++,考虑使用std::vector
而不是数组。这将为您提供更多的空间来确定您在实用程序函数中使用的数组项的维度,并减少数组访问中出现错误的可能性。
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- SDL_LoadWAV未加载文件
- 如果流无法加载文件,并且无法打开
- 无法使用 fopen() 加载文件
- 如何在mac上为c++加载文件
- 如何以编程方式知道Adobe Reader完成了加载文件
- 使用loadFromFile()函数加载文件
- 使用微小的xml保存和加载文件
- C++加载文件
- C++从SQL数据库加载文件
- 从"Resource Files"文件夹加载文件C++ Windows 应用程序 (win32)
- 构建时如何在Visual Studio c++中加载文件
- 用dlsym加载文件,无法加载库
- 当在c#中加载c++ dll时,CLR是否会自动加载c++文件的依赖项?
- OpenCV视频捕获不加载文件
- 用char指针加载文件
- TinyXml解析器拒绝正确加载文件
- CMake 错误在 CMakeLists.txt:56 (include): 包含找不到加载文件: gmxVersion