所以在我的计算机科学课上,我们做了一个月球着陆器游戏。在代码的最后,我们应该询问用户是否想再次运行游戏,而我已经建立了yes和no循环,它仍然无法工作。它让我输入'Y'和'N',但它只是在单词之后断开。
// Include Section
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
// Main Program
int main( )
{
// Variable Declarations
double E; // Engine output
double V; // Velocity output
double A; // Altitude output
double T; // Time output
double F; // Fuel consumption
double Th; // Thrust
double x; // The variable output the user puts in
double G; // The gravity of the moon
double Acceleration;// The acceleration found between the force and the
gravity
double M; // Total Mass of the lander
double Force; // The force opposing the lunar gravity
double W; // Weight
double Thrust; // The initial thrust value
char Ans;
A=2300;
V=0;
T =0;
F=300;
G=-1.62;
Thrust=43900;
M= 6831;
// Output Identification
system("CLS");
cout << "Welcome to the Lunar Lander simulation!" << endl;
cout << endl;
cout << "You are in command of the Lunar Lander on its final approach to the moon's surface."
" You need to control the thrust to the main decent engine."
" You will adjust it each second by typing in the percent thurst that you would like for the next second."
" Your goal is to end land the spacecraft at a velocity of less than 1 meter/second."
<<endl;
cout << endl;
cout << "GOODLUCK!"<<endl;
cout << endl;
cout << setw(8) << "Sec" << setw(10) << "Alt" << setw(10) << "Speed" << setw(8) << "Fuel" << endl;
while(F > 0)
{
if(A > 0)
{
cout << setw(8) << T << setw(10) << A << setw(10) << V
<< setw(8) << F << setw(14) << " Enter percent burn (0-100):";
cin >> x;
if( x < 0|x > 100)
{
cout << "Please pick a valid percentage."<< endl;
}
else
{
T++;
x=x/100;
Th= x*Thrust;
E= 13.6*x;
F= F-E;
M =M-E;
W=M*G;
Force=Th+W;
Acceleration=Force/M;
V=V+Acceleration*1;
A=A+V*1-.5*Acceleration*1;
}
}
else
{
if(V <= -1 & V >=-3)
{
cout << "Congratulations!" << endl;
cout << "Would you like to run the simulation again? <Y/N>"<<endl;
cin >> Ans;
if(Ans == 'Y'|| Ans == 'y')
return 0;
else
break;
}
else
{
cout << "Game Over" <<endl;
cout<< "Would you like to run the simulation again? <Y/N>"<<endl;
cin >> Ans;
if(Ans == 'Y'||Ans == 'y')
return 0;
else
break;
}
}
if(F<=0)
{
cout<< "Would you like to run the simulation again? <Y/N>"<<endl;
cin >> Ans;
if(Ans == 'Y'|| Ans=='y')
return 0;
else
break;
}
}
}
答案 0 :(得分:0)
cout<< "Would you like to run the simulation again? <Y/N>"<<endl;
cin >> Ans;
if(Ans == 'Y'|| Ans=='y')
return 0;
else
break;
返回0无助于您的代码再次运行循环。 我想你可以用
的形式修改你的代码while(1){
cout<< "Would you like to run the simulation again? <Y/N>"<<endl;
cin >> Ans;
if(Ans == 'N'||Ans == 'n')break;
}
希望这对你有所帮助。
答案 1 :(得分:0)
稍微优雅的解决方案。
std::string line;
do {
// code to be repeated upon "Y"
} while (std::getline(std::cin, line) && line == "Y");
答案 2 :(得分:0)
在解决了使用|
代替||
的明显错误后,其他问题是:
如果您引入了一些简单的bool
变量来确定代码中的循环是否应该继续,那将会有所帮助。
例如:
bool inputOk;
do
{
inputOk = true;
cout << setw(8) << TimeOutput << setw(10) << Altitude << setw(10) << V
<< setw(8) << F << setw(14) << " Enter percent burn (0-100):";
cin >> x;
if (x < 0 || x > 100)
{
cout << "Please pick a valid percentage." << endl;
inputOk = false;
}
} while (!inputOk);
您现在不需要在此代码之后拥有else
,因为这只会在输入正常之前离开循环。
鉴于此,您应该使用与上面相同的技术进行整个循环,在那里您要求运行另一个模拟:
bool runLoop; // instead of while (F > 0)
do
{
runLoop = true;
//.. your other code
//...
cout << "Would you like to run the simulation again? <Y/N>" << endl;
cin >> Ans;
if (Ans != 'Y' && Ans != 'y')
runLoop = false;
//...
} while (runloop);
很简单。您只需继续运行循环,直到用户不想再运行模拟。您可以通过编写do-while并测试runLoop
状态来实现此目的。如果用户决定退出,则runLoop
设置为false,因此循环终止。