为什么会发生这种情况?(重新询问用户)C++; 你好,所以我试着用C++做一个游戏(PK),我得到了奇怪的结果。 基本上你输入你的名字,上面写着你的名字。如果是,会有人问你喜欢哪种类型。但是,如果输入N,然后输入Y,出于某种原因,它会不止一次地询问用户喜欢哪种类型
我的代码: Animals.cpp(我之所以这样说是因为它是程序询问用户的地方):为什么会发生这种情况?(重新询问用户)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;
//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();
}