我遇到了这个菜单驱动程序的问题,该程序是我创建的链接列表类。我创建了一个抽象类,并成功地将它链接到这个菜单驱动的程序。我怎么遇到问题呢。
首先,我使用选项1成功填充链接列表,但是当我完成并尝试选择另一个菜单选项以显示我的列表时,它不会显示任何内容,就好像它是空的一样。
有人可以指出我正确的方向,如何使用这个菜单驱动程序来解决这个问题。
我对此计划的意图
选择选项1以填充我的链接列表
我想返回原始菜单选择其他选项 例如:从我的列表中删除一个数字,或者只显示我当前的列表
// This program demonstrates the displayList member function.
#include <iostream>
#include "NumberList.h"
using namespace std;
int main()
{
double user_input = 0;
int menu_choice = 0;
int num = 0;
NumberList list;// Define a NumberList object.
//display for the user
cout << " Your Menu Options \n\t\t\t\t ";
cout << "\n\n\n 1. This Option Will Allow You To Add Numbers To The Link Class ";
cout << "\n\n 2. This Option Will Allow You To Insert A Number To The Middle Of The List ";
cout << "\n\n 3. This Option Will Allow You To Delete A Number From The List ";
cout << "\n\n 4. This Option Will Allow You To View The List Created ";
cout << "\n\n Your Menu Choice Is : ";
cin >> menu_choice;
switch ( menu_choice)
{
case 1:
// Get the number of days.
cout << "\n\n HOW MANY NUMBERS WILL YOU LIKE TO ENTER : ";
cin >> num;
// Get the sales for each day and accumulate a total.
for (int count = 1; count <= num; count++)
{
double list_number;
cout << " Please Enter Number ( " << count << " ): ";
cin >> list_number;// accept list number to ass to the list
list.appendNode(list_number); // sends number to list class
}
main();
break;
case 2:
// Insert a node in the middle of the list.
list.insertNode(user_input);
main(); // this is here for me to return to my menu
break; // this will be a break for the class
case 3:
// Delete the middle node.
list.deleteNode(user_input);
main();
break;
case 4:
// Display the values in the list.
list.displayList();
main();
break;
defualt:
cout << " INVALID ENTRY PLEASE CHOOSE NUMBERS 1-4 ";// invalid menu option message
break;
}
system("pause");
return 0;
}
答案 0 :(得分:1)
当你递归调用main
时,你正在执行main的另一个副本,它有自己的局部变量:特别是它自己的列表。
你应该在初始化之后将main
的部分包裹起来(你只想做一次)(你可能需要一个菜单选择来结束程序)。
答案 1 :(得分:1)
您的代码无法按预期工作的原因是因为您对main()
的递归调用每次都会创建一个不同的NumberList
对象。你的递归概念原则上可以,你需要理解一些事情:
main()
用作递归函数。这可能会导致未定义的行为,通常被认为是错误的编码。list
结束。while
循环并将case
放在那里。仅在提供更高效率或性能时才使用递归。