C++ 游戏菜单不工作C++;

C++ 游戏菜单不工作C++;,c++,ubuntu,cout,C++,Ubuntu,Cout,所以我有一个游戏,当我运行它时,首先调用函数menu()。由于某些原因,它不会接受输入并正确地转到下一步。有什么想法吗 void menu() { char x = -1; while (x != '3') { cout << "\n"; cout << "\n"; cout << "\n---------------------"; cout << "\n M

所以我有一个游戏,当我运行它时,首先调用函数
menu()
。由于某些原因,它不会接受输入并正确地转到下一步。有什么想法吗

void menu() {
    char x = -1;
    while (x != '3') {
        cout << "\n";
        cout << "\n";
        cout << "\n---------------------";
        cout << "\n     Main Menu       ";
        cout << "\n 1 - Start a New Game";
        cout << "\n 2 - Instructions    ";
        cout << "\n 3 - Exit Game       ";
        cout << "\n---------------------";
        cout << "\n";
        cout << "\n";
        cout << "\n     Enter Selection:";
        cin >> x;
        switch (x) {
            case '1':
                for(i=0; i<15;i++){
                cout<<"\n"
                }
                playgame();
                break;
            case '2':
               for(i=0; i<15;i++){
                cout<<"\n"
                }
                instructions();
                break;
            case '3':
                for(i=0; i<15;i++){
                cout<<"\n"
                }
                cout << "Good bye\n" << endl;
                break;
            default:
                cout << "Invalid Character\n";
                cout << "\n";
                cout << "Press Space to continue\n";
        }
        for(i=0; i<15;i++){
                cout<<"\n"
                }
    }
}
void菜单(){
字符x=-1;
而(x!=“3”){

cout如果您使用的是Ubuntu/Debian(或任何类型的Linux)
系统(“CLS”)
可能无法工作。
CLS
是清除终端的DOS命令

如果系统使用
sh
等,您可以使用
clear
达到相同的效果。但您可能应该避免
system
所有这些,并寻找更可靠的替代方案


我在Windows上使用bash,这种配置的结果更加有趣,因为
system
在Windows上使用
cmd.exe
,因此
CLS
可以工作,但不能
clear

如果执行以下程序,则会发出嘶嘶声:

#include <stdlib.h>

int main(int argc, char *argv[])
{
        system("clear");
}
#包括
int main(int argc,char*argv[])
{
系统(“清除”);
}
正如您所看到的,当您运行
系统时,会发生什么事情
完全依赖于底层shell。底层shell可能不是您执行程序的shell。这可能非常可怕


这个问题有一些很好的相关答案:


如果您使用的是Ubuntu/Debian(或任何类型的Linux)
系统(“CLS”)
可能无法工作。
CLS
是清除终端的DOS命令

如果系统使用
sh
等,您可以使用
clear
达到相同的效果。但您可能应该避免
system
所有这些,并寻找更可靠的替代方案


我在Windows上使用bash,这种配置的结果更加有趣,因为
system
在Windows上使用
cmd.exe
,因此
CLS
可以工作,但不能
clear

如果执行以下程序,则会发出嘶嘶声:

#include <stdlib.h>

int main(int argc, char *argv[])
{
        system("clear");
}
#包括
int main(int argc,char*argv[])
{
系统(“清除”);
}
正如您所看到的,当您运行
系统时,会发生什么事情
完全依赖于底层shell。底层shell可能不是您执行程序的shell。这可能非常可怕


这个问题有一些很好的相关答案:


好的,那么这里到底是什么问题。菜单从未显示,或者是当菜单确实显示并且您输入了一个选项时,它没有做正确的事情?菜单显示了,但它从来没有认为输入是正确的。它只是返回“CLS:INVALID”嗯,首先看看这个,知道为什么永远不要使用system()。或者至少是为什么在执行此操作时要非常小心:还可以查看此选项:从错误消息中可以看出,系统()call就是问题所在。您是否使用调试器进行了调试。要查看选择了哪种情况?当开关总是跳到默认分支时,x的值是多少?这可能会有一些提示。例如,如果您在数字键盘上键入数字,根据num lock的状态,您可能首先会得到一个特殊字符的指示器然后你将得到真实的字符。好吧,那么这里到底是什么问题。菜单从未显示,或者是当菜单确实显示并且你输入了一个选择时,它没有做正确的事情?菜单显示了,但它从未将输入视为正确。它只是返回“CLS:无效”嗯,首先看看这个,了解为什么永远不要使用system()。或者至少知道为什么在使用system()时要非常小心:也看看这个,寻找替代方法:从错误消息中可以看出system()是call就是问题所在。您是否使用调试器进行了调试。要查看选择了哪种情况?当开关总是跳到默认分支时,x的值是多少?这可能会有一些提示。例如,如果您在数字键盘上键入数字,根据num lock的状态,您可能首先会得到一个特殊字符的指示器不完全是,我放了一个新的编辑来描述我的新问题不完全是,我放了一个新的编辑来描述我的新问题