C++ break语句未退出循环

C++ break语句未退出循环,c++,C++,这是一个猜数字游戏。。。问题是主函数中的“if”子句有中断;声明,它工作不正常。。。其目的是,每当用户猜测正确时,它都会显示相应的消息,然后退出循环。。。。但是不知何故,break语句并没有退出,它只是继续到下一个迭代 #include<iostream> #include<string> using namespace std; int computer_number(){ int number; number=(rand() %

这是一个猜数字游戏。。。问题是主函数中的“if”子句有中断;声明,它工作不正常。。。其目的是,每当用户猜测正确时,它都会显示相应的消息,然后退出循环。。。。但是不知何故,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;
}
#包括
#包括
使用名称空间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;
}