我想在控制台内创建一个简单的用户菜单, 我可以在其中输入1、2、3 ...来启动某些功能,但是用户输入(在cap_console.cpp内部)存在问题,因为我的程序无法到达if语句,并且不会终止。
到目前为止,我的代码:
main.cpp
#include <iostream>
#include "cab_console.h"
int main(int argn, char ** argv){
cab_console CONSOLE_MENU;
CONSOLE_MENU.console();
}
cab_console.h
#ifndef CAB_CONSOLE_H
#define CAB_CONSOLE_H
class cab_console
{
public:
char input;
cab_console();
void menu();
void quit_console();
void console();
};
#endif // CAB_CONSOLE_H
cab_console.cpp
void cab_console::console(){
char input = '0';
cout << "This is the menu." << endl;
while(input != 'Q') {
cout << "Choose an action:" << endl;
cout << "1 - Create ..." << endl;
cout << "2 - Show ..." << endl;
cout << "3 - Repeat ..." << endl;
cout << "Q - Quit..." << endl;
cin >> input;
if(input == '1') {
cout << "use function1 here..." << endl;
cab_console::console();
}
if(input == '2'){
cout << "use function2 here..." << endl;
cab_console::console();
}
if(input == '3') {
cout << "use function3 here..." << endl;
cab_console::console();
}
if(input == 'Q'){
cout << "Quit console..." << endl;
cab_console::quit_console();
}
else{
cout << "Its not a valid input.";
cab_console::console();
}
}
}
这是我的输出
This is the menu.
Choose an action:
1 - Create ...
2 - Show ...
3 - Repeat ...
Q - Quit...
如果我输入其中之一,我的程序会运行,但是如上所述,它不会进入if语句。
非常感谢
答案 0 :(得分:0)
无需递归调用console
。
发生的情况是,第一次调用控制台会调用另一个实例。现在,您键入的命令由第二个实例处理,该实例将调用另一个实例,依此类推。当您键入Q
时,只有最后一个实例终止,其他实例处于活动状态并准备接受输入。
为什么不尝试以下方法呢? (请注意,不涉及递归)。
bool valid_input(const char c){
return c=='1' || c=='2' || c=='3' || c=='Q';
}
char input='0';
while(input != 'Q') {
do{
cout << "Choose an action:" << endl;
cout << "1 - Create ..." << endl;
cout << "2 - Show ..." << endl;
cout << "3 - Repeat ..." << endl;
cout << "Q - Quit..." << endl;
cin >> input;
}while(!valid_input(input));
if(input == '1') {
cout<<"use function1 here...\n";
}
if(input == '2'){
cout<<"use function2 here...\n";
}
if(input == '3') {
cout<< "use function3 here...\n";
}
if(input == 'Q'){
cout<< "use functionQ here...\n";
}
}
尝试here
答案 1 :(得分:0)
像在其他地方提到的那样,递归调用自身将是有问题的。 这是一个使用While循环完成您打算做的事情的快速示例。添加其他写语句将帮助您,并学习使用真正的调试器。
#include <iostream>
using namespace std;
int main(){
char input = '0';
cout << "This is the menu." << endl;
while(input != 'Q') {
cout << "Choose an action:" << endl;
cout << "1 - Create ..." << endl;
cout << "2 - Show ..." << endl;
cout << "3 - Repeat ..." << endl;
cout << "Q - Quit..." << endl;
cin >> input;
cout << "You enetered: " <<input << endl;
if(input == '1') {
cout<< "use function1 here..." << endl;;
}
else if(input == '2'){
cout<< "use function2 here..." << endl;;
}
else if(input == '3') {
cout<< "use function3 here..." << endl;
}
else if(input == 'Q'){
cout << "Leaving so soon?" << endl;
}
else{
cout << "Its not a valid input.";
}
}
return 0;
}