我是编程新手,过去一周左右一直在学习C ++教程。今天,我决定在没有帮助的情况下制作我自己的控制台应用程序,以确保我到目前为止已经阅读了所有概念。应用程序在开始时会要求您将5个不同的单词放入5元素数组中。然后,菜单会提示您4个选项:打印数组内容,重新输入所有单词,只编辑一个数组元素,或退出应用程序。
当我选择“仅编辑一个阵列”选项时,应用程序会提供另一个菜单,要求您按“1”打印阵列,或按任何其他键继续编辑。直接编辑选项导致程序启动的混合版本,使用“1”选项导致混乱:http://i.imgur.com/3isTD.jpg。控制台继续在屏幕上打印类似于图片中的对象大约5秒钟,直到弹出窗口提示我结束该过程。应用程序关闭后,我在输出日志中收到此信息:pastebin.com/KcRU56Tg
我的应用程序的源代码可以在这里找到:http://pastebin.com/vRUddYuK。我通常会尝试自己调试(过去一个半小时),但我觉得这是我的想法。任何帮助将不胜感激。谢谢。
答案 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)
您的变量i
和n
是多余的;你只需要其中一个变量。
当您调用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函数的开头声明每个变量。