抓住我的头,因为它工作得很好,但当我去添加一些其他功能时突然我的程序吓坏了,我无法恢复原状。
课程让我写一个摇滚/纸/剪刀程序来对抗计算机,任何有关循环不断终止的帮助都会很精彩#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void RPSout(char);
int RPScomp();
int main() {
char choice;
int endit=0;
while (endit == 0)
{
cout << "\n\n\tReady to play Rock/Paper/Scissors against the computer??(please choose R/P/S)(Q to quit)\n";
cin >> choice;
RPSout(choice);
if (choice=='Q'||'q')
{endit=1;}
}
return 0;
}
void RPSout(char choose)
{
int RPS =0;
int comp=0;
switch (choose)
{
case 'R':
case 'r':
{
cout <<"Your choice: Rock";
break;
}
case 'P':
case 'p':
{
cout <<"Your choice: Paper";
break;
}
case 'S':
case 's':
{
cout << "Your choice: Scissors";
break;
}
case 'Q':
case 'q':
{
cout << "Bye Bye Bye";
break;
}
default:
cout<<"You enter nothing!"<<endl;
cout << "The valid choices are R/P/S/Q)";
}
return;
}
int RPScomp()
{
int comp=0;
const int MIN_VALUE =1;
const int MAX_VALUE =3;
unsigned seed = time(0);
srand(seed);
comp =(rand() % (MAX_VALUE - MIN_VALUE +1)) + MIN_VALUE;
return comp;
}
答案 0 :(得分:5)
if (choice=='Q'||'q')
这相当于
if ((choice == 'Q') || 'q')
这几乎肯定不是你想要的。 'q'
是一个非零char
字面值,它是&#34; truthy&#34;所以这个表达永远不会是假的。它类似于撰写if (choice == 'Q' || true)
。
解决方案是:
if (choice=='Q' || choice=='q')
答案 1 :(得分:2)
声明
if (choice=='Q'||'q')
始终测试为true,因此设置标志以终止循环。
尝试:
if (choice=='Q'||choice=='q')
答案 2 :(得分:1)
我认为你的if语句应该是if (choice=='Q'|| choice=='q')
答案 3 :(得分:0)
如果使用if语句
,则会出现问题if (choice=='Q'||'q')
{endit=1;}
|| &#39; Q&#39;部分永远是真实的,因为&#39; q&#39;在ASCII中不是0 将您的代码更改为
if (choice=='Q'|| choice=='q')
{endit=1;}