C ++控制台应用程序正在运行

时间:2012-07-10 04:17:23

标签: c++

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

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

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

3 个答案:

答案 0 :(得分:3)

在进行迭代时应该避免使用

do { ... } while语句。像你一样制造逻辑错误太容易了。

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

使用

重写您的迭代
for(int i=0;i < 5;++i)

你的逻辑会更清晰,错误也不太可能发生。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

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

// 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函数的开头声明每个变量。