为什么会发生这种情况?(重新询问用户)C++; 你好,所以我试着用C++做一个游戏(PK),我得到了奇怪的结果。 基本上你输入你的名字,上面写着你的名字。如果是,会有人问你喜欢哪种类型。但是,如果输入N,然后输入Y,出于某种原因,它会不止一次地询问用户喜欢哪种类型

为什么会发生这种情况?(重新询问用户)C++; 你好,所以我试着用C++做一个游戏(PK),我得到了奇怪的结果。 基本上你输入你的名字,上面写着你的名字。如果是,会有人问你喜欢哪种类型。但是,如果输入N,然后输入Y,出于某种原因,它会不止一次地询问用户喜欢哪种类型,c++,C++,我的代码: Animals.cpp(我之所以这样说是因为它是程序询问用户的地方): //anives.cpp:此文件包含“main”函数。程序执行从那里开始并结束。 // void startgame(); 无效askname(); void asktype(); void-give-starter(); void-waterstarter(); void-firestarter(); #包括 #包括“plantee.h” //#包括“visualanimal.h” #包括 使用名称空间std;

我的代码:

Animals.cpp(我之所以这样说是因为它是程序询问用户的地方):

//anives.cpp:此文件包含“main”函数。程序执行从那里开始并结束。
//
void startgame();
无效askname();
void asktype();
void-give-starter();
void-waterstarter();
void-firestarter();
#包括
#包括“plantee.h”
//#包括“visualanimal.h”
#包括
使用名称空间std;
字符串名;
煤焦类型;
答案;
成功;
int main()
{
使用动物;
startgame();
返回0;
}
void startgame(){
askname();

cout那是因为你在使用递归进行验证。如果你继续这样做的话,这将给你带来困难

让我们检查一下调用堆栈(函数名附近的数字是递归深度):

  • main()
    调用
    startGame1
  • startGame1
    请求输入,输入
    N
    ,调用
    startGame2
  • startGame2
    调用
    askType
  • askType
    执行其操作并返回
  • startGame2
    返回
  • startGame1
    switch
    之后拾取,下一条指令是调用
    askType
  • askType
    做它的事情(再次)
  • 您可以改为使用while循环:

    void startgame() {
        char answer = 'N';
        while (answer == 'N') {
            askname();
            cout << "Alright then. You're " << name << " , right?" << "(Y/N)";
            cin >> answer;
        }
        asktype();
    }
    
    void startgame(){
    char-answer='N';
    而(答案='N'){
    askname();
    
    我可以有其他使用过的文件,但它们不会影响它,如果你请求其他代码,我会添加它。你可以从一开始就共享输入的确切顺序吗?这可能会有帮助。与你的问题无关,但教你编程的人没有做好。不要使用全局变量。不要执行递归(函数调用本身)对于简单循环。总是预料到意外情况(尤其是在使用输入时),所以总是要进行输入验证并检查不期望的输入。对于简单的“是”/“否”,不要使用
    switch
    选择。不要包含
    ,除非你需要使用C风格的空终止字符串和相关的C函数。@Someprogrammerdude-thx,但我在自学
    void startgame() {
        char answer = 'N';
        while (answer == 'N') {
            askname();
            cout << "Alright then. You're " << name << " , right?" << "(Y/N)";
            cin >> answer;
        }
        asktype();
    }