提问者:小点点

break语句未退出循环


这是一个猜数游戏……问题是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子句工作正常


共3个答案

匿名用户

您的代码永远不能输入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-用计算机术语来说是“是”或“否”。 除此之外,我们使用truefalse,它们分别具有“是”和“否”的特殊含义。 例如:
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)相同