C++ break语句未退出循环
这是一个猜数字游戏。。。问题是主函数中的“if”子句有中断;声明,它工作不正常。。。其目的是,每当用户猜测正确时,它都会显示相应的消息,然后退出循环。。。。但是不知何故,break语句并没有退出,它只是继续到下一个迭代C++ break语句未退出循环,c++,C++,这是一个猜数字游戏。。。问题是主函数中的“if”子句有中断;声明,它工作不正常。。。其目的是,每当用户猜测正确时,它都会显示相应的消息,然后退出循环。。。。但是不知何故,break语句并没有退出,它只是继续到下一个迭代 #include<iostream> #include<string> using namespace std; int computer_number(){ int number; number=(rand() %
#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;
}
#包括
#包括
使用名称空间std;
int计算机_编号(){
整数;
数字=(rand()%10)+1;
返回号码;
}
字符串结果(int用户、int计算机){
如果(用户==计算机)
{
返回(“用户猜测匹配\n\n\n\nyyyaaayayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy;
}
其他的
{
返回(“猜测不正确\n”);
}
}
int main(){
int计数器=1;
字符串r;
cout可能有一个更简单的解决方案,但是你可以只使用一个设置为false的布尔值,而不是使用一个break,并且在while循环中使用while(true)和while(myboolean==true)相同的while(myboolean)结果
返回一个字符串,该字符串要么是“用户猜测匹配\n\n\nyyyaaaayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
您正在检查r
是否等于“用户猜测匹配”
。问题是计算机对事物的理解非常严格。它们精确地检查比较。字符串相似是不够的,它们必须相同。当然,“用户猜测匹配”
与不同用户猜测匹配\n\n\n\nyyyaaaayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
总之,您需要将if
子句更改为:
if(r==“用户猜测匹配\n\n\n\nyyyaaaaayayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy!!!”)
{
cout如果分支,则您的代码永远无法输入该
result()
函数有两种可能的结果:
“用户猜测匹配\n\n\n\nyyyaaaayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
正是出于这个原因,你们应该极力避免为代码流比较字符串。简单的打字或更改可能会使你们的程序无声地中断,编译器将无法帮助你们
此处使用的正确类型是bool
:
bool result(int user , int computer){
return user == computer;
}
大体上:
bool r = result(user_number,correct_number);
if(r)
{
//print some congratulations to the user
break;
}
为什么要从结果返回字符串?只需返回true或false即可r
是否“用户猜测匹配\n\n\n\nyyyaaayayyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy“
…如果
,则无法输入此。如果我返回字符串而不是布尔值,是否有任何问题?result()返回两个字符串中的一个。它们都不是“用户猜测匹配的”。@FarbodAhmadian我认为而不是(true)
真的那么糟糕吗?我怀疑是否必须在作用域中使用另一个变量并处理初始化/分配正确的值真的更好。我不认为而(true)
真的那么糟糕,我怀疑是否必须在作用域中使用另一个变量并处理初始化/分配正确的值真的要好得多。无论如何,他们的问题是测试是打破还是“打破”,这是错误的,因此使用一个变量并不能解决这个问题。
bool r = result(user_number,correct_number);
if(r)
{
//print some congratulations to the user
break;
}