您好,所以我试图使用C++制作游戏(基于神奇宝贝),但结果却很奇怪。
基本上,您输入您的名字,然后说您叫这个名字。如果是,系统将询问您喜欢哪种类型。但是,如果输入N然后输入Y,由于某种原因,它会多次询问用户他们喜欢哪种类型。
我的代码:
Animals.cpp(我只说这一个是因为它是程序询问用户的地方):
// Animals.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
void startgame();
void askname();
void asktype();
void giveGrassStarter();
void giveWaterStarter();
void giveFireStarter();
#include <iostream>
#include "plantee.h"
// #include "visualanimal.h"
#include <cstring>
using namespace std;
string name;
char type;
char answer;
bool success;
int main()
{
using namespace Animals;
startgame();
return 0;
}
void startgame() {
askname();
cout << "Alright then. You're " << name << " , right?" << "(Y/N)";
cin >> answer;
switch (answer) {
case 'N':
startgame();
}
asktype();
}
void askname() {
cout << "Welcome. Your Journey In the World Of Animals Starts here . Please input your name";
cin >> name;
}
void asktype() {
cout << "Welcome " << name << " . What type do you prefer? Water ? Grass? Fire? (W/G/F)";
cin >> type;
switch (type) {
case 'G':
giveGrassStarter();
break;
case 'W':
giveWaterStarter();
break;
case 'F':
giveFireStarter();
break;
default:
cout << "Input invalid . (G for Grass , W for Water , F for Fire)";
asktype();
}
}
void giveGrassStarter()
{
cout << "So you chose Plantee , the grass-type starter. Good choice";
Plantee starter;
}
void giveWaterStarter()
{
cout << "So you chose Wateree , the water-type starter. Good choice";
}
void giveFireStarter()
{
cout << "So you chose Flamee , the fire-type starter. Good choice";
}
有人知道我在做什么错吗? 最佳答案
那是因为您使用循环进行验证。如果您继续这样做,将会给您带来困难。
让我们检查一下调用堆栈(函数名附近的数字是递归深度):
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();
}
另外,请尝试避免使用全局变量。他们是常见的麻烦制造者。您只需要在一个函数中添加answer
,即可在其中声明它。与type
相同。