控制台输入功能不会在while循环内终止

时间:2018-10-18 12:41:20

标签: c++ loops input

我想在控制台内创建一个简单的用户菜单, 我可以在其中输入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语句。

非常感谢

2 个答案:

答案 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;
}