1

我对编程很陌生,过去一周左右一直在学习 C++ 教程。今天,我决定在没有帮助的情况下制作自己的控制台应用程序,以确保我已经掌握了到目前为止所阅读的所有概念。该应用程序一开始会要求您将 5 个不同的单词放入一个 5 元素数组中。然后,您会看到一个菜单,其中提供 4 个选项:打印数组的内容、再次重新输入所有单词、仅编辑一个数组元素或退出应用程序。

当我选择“只编辑一个数组”选项时,应用程序会提供另一个菜单,要求您按“1”来打印数组,或者按任何其他键继续编辑。直接编辑选项会导致程序启动的混搭版本,使用“1”选项会导致混乱:http: //i.imgur.com/3isTD.jpg。控制台继续在屏幕上打印与图片中的对象相似的对象约 5 秒钟,直到弹出窗口提示我结束进程。应用程序关闭后,我在输出日志中收到此信息:pastebin.com/KcRU56Tg

我的应用程序的源代码可以在这里找到:http: //pastebin.com/vRUddYuK。我通常会尝试自己调试(过去一个半小时一直在调试),但我觉得这超出了我的想象。任何帮助将不胜感激。谢谢你。

4

3 回答 3

3

do { ... } while进行迭代时应避免使用语句。像你一样犯逻辑错误太容易了。

请注意, PrintInv 正在执行它的 cout 语句 when n == 5,这是一个错误,因为 inv 只有索引的有效元素0...4

重写你的迭代

for(int i=0;i < 5;++i)

并且您的逻辑会更清晰,并且错误发生的可能性会更小。

于 2012-07-10T04:25:08.797 回答
2

您似乎将一个n等于 5 的值传递给PrintInv. 然后,您访问inv[n],即 inv[5],它超出了 5 元素数组的范围。不幸的是,这不会导致您的程序崩溃。相反,它只是转储大量内存,直到它碰巧来自随机 NULL。

于 2012-07-10T04:23:04.327 回答
0

你的变量in是多余的;您只需要其中一个变量。

当您调用等于 5的PrintInv函数并且数组的打印值超过数组末尾时,就会出现问题,因此您会看到正在打印的垃圾值。nPrintInv

您应该将打印功能更改为如下所示:

// pass the array and the size of the array to your print function
void printInv(string inv[], int arrSize) {
   for(int i = 0; i < arrSize; ++i) { 
      cout << "Item " << (i + 1) << ": " << inv[i] << endl;
   }
}

并像这样调用函数:

printInv(inv, 5);

此外,变量应该在它们需要的范围内声明。您不需要在 main 函数的开头声明每个变量。

于 2012-07-10T04:46:19.207 回答