这是一个猜数游戏……问题是main函数中的“if”子句有break; 语句,并且它不能正常工作。。。 它的目的是,只要用户猜测正确,它就会显示适当的消息,然后退出循环。。。。 但是break语句并没有退出它只是继续到下一个迭代
#include<iostream>
#include<string>
using namespace std;
int computer_number(){
int number;
number=(rand() % 10)+1;
return number;
}
string result(int user , int computer){
if(user == computer)
{
return ("User guess matched\n\n\n\nyyyaaaaayyyyyyyyyy!!!!!!");
}
else
{
return ("guess is not correct\n");
}
}
int main(){
int counter=1;
string r;
cout<<"Welcome to guess the number game...!!!!!!!!"<<endl;
int correct_number;
correct_number = computer_number();
cout<<"computer has choosen the number"<<endl;
cout<<"\n\n";
while(true){
cout<<"\n\n\n"<<"Please guess a number between 1 to 10, you have 10 chances ... best of luck..!!!!"<<endl;
int user_number = 0;
cin>>user_number;
cout<<"you chose "<<user_number<<endl;
cout<<"\n\n\n"<<endl;
cout<<"let's see if it is corect..."<<endl;
r = result(user_number,correct_number);
cout<<r;
if(r=="User guess matched")
{
cout<<"You have guessed the number in "<<counter<<" times";
cout <<endl;
break;
}
else
{
counter++;
cout<<"\n\n\nturn: "<<counter<<"\n\n";
if (counter>10)
{
cout<<"you only had 10 chances"<<endl;
cout<<"you lost"<<endl;
break;
}
}
}
return 0;
}
问题在于:
if(r=="User guess matched")
{
cout<<"You have guessed the number in "<<counter<<" times";
cout <<endl;
break;
}
此代码段没有退出while循环,而else子句工作正常
您的代码永远不能输入if
分支。
Result()
函数有两种可能的结果:“User guess Matched 它们都不等于
“用户猜测匹配”
。
由于这个原因,您应该强烈避免比较代码流的字符串。 简单的错别字或更改会无声无息地破坏你的程序,编译器将无法帮助你。
此处使用的正确类型是bool
:
bool result(int user , int computer){
return user == computer;
}
在Main中:
bool r = result(user_number,correct_number);
if(r)
{
//print some congratulations to the user
break;
}
result
返回一个字符串,该字符串为“User guess Matched 其中一个值将位于
r
中。
您正在检查R
是否等于“User guess Matched”
。 问题是计算机对事物的处理非常严格。 他们精确地核对比较。 字符串相似是不够的,它们必须是相同的。 当然,“用户猜匹配”
与“用户猜匹配
总之,您需要将if
子句更改为:
if(r=="User guess matched\n\n\n\nyyyaaaaayyyyyyyyyy!!!!!!")
{
cout<<"You have guessed the number in "<<counter<<" times";
cout <<endl;
break;
}
编辑:
我还要提出几点:
bool
-用计算机术语来说是“是”或“否”。 除此之外,我们使用true
或false
,它们分别具有“是”和“否”的特殊含义。 例如:bool result(int user, int computer){
return user == computer; // yes, you can do this!
}
int main() {
// ...
bool res;
while(true) {
// ...
res = result(user_number,correct_number);
if (res) {
cout << "You have guessed the number in " << counter << " times" << endl;
break;
} else {
counter++;
cout << "\n\n\nturn: " << counter << "\n\n";
if (counter > 10) {
cout << "you only had 10 chances" << endl;
cout << "you lost" << endl;
break;
}
}
}
return 0;
}
>
专业的C++程序员看到这一点仍然会感到不寒而栗,因为有很多事情可以用它来完成。 首先,不需要result
函数。 其次,如果您有一个counter
变量,那么for
循环可能是可行的。 res
变量在这里也是相当多余的。
您还会注意到,我还改变了代码的布局方式。 这是因为,虽然您可能希望遵循自己的代码风格,但当您编写的代码看起来与其他人的代码相似时,您会发现将来与他们一起工作要容易得多。 我写得很标准。
可能有一个更简单的解决方案,但是你可以将一个布尔值设置为false而不是使用break,并且在while循环中使用while(myboolean),而不是使用while(true),它与while(myboolean==true)相同