【问题标题】:Why am I getting lvalue required as left operand of assignment? [closed]为什么我需要左值作为赋值的左操作数? [关闭]
【发布时间】:2023-03-04 17:10:01
【问题描述】:

简单的石头、剪刀、纸程序。
我收到错误消息:[Error] lvalue required as left operand of assignment. 我不知道出了什么问题,因为我是 C++ 编程新手,为什么它不接受 if 语句?

// Globale variabler
int PC, User; // For å sammenligne input
int Uavgjort = 0;
int user_score = 0;
int pc_score = 0;

int RandRange( int low, int high );
void Compare_values();



int main()
{
    srand( time( NULL ) );

    cout << "Valg:" << '\n';
    cout << "1. Stein" << '\n'
         << "2. Saks" << '\n'
         << "3. Papir" << '\n' << endl;

    while ( cin >> User )
    {
        RandRange( 1, 3 );
        Compare_values(); // sammenligner brukers verdi og random verdi
        if ( user_score >= 10 || pc_score >= 10 )
            break;
    } // while slutter her

    cout << "Game over!" << "\n\n";
    cout << "Score: \n" 
         << "PC Wins: " << pc_score << " times" << '\n'
         << "You won: " << user_score << " times" << '\n' << endl;

    cin.get();
}

int RandRange( int low, int high )
{
    PC = rand() % ( high - low + 1 ) + low;

    return PC;
}

void Compare_values()
{
        if ( User == 1 && PC == 1 )
        {
            cout << "Stein vs. Stein" << '\n';
            cout << "Uavgjort!" << '\n';
            ++Uavgjort;
        }
        else if ( User == 1 && PC == 2 )
        {
            cout << "Stein vs. Saks" << '\n';
            cout << "Du vant!" << '\n';
            ++user_score;
        }
        else if ( User == 1 && PC == 3 )
        {
            cout << "Stein vs. Papir" << '\n';
            cout << "Dessverre, du tapte." << '\n';
            ++pc_score;
        }
        else if ( User == 2 && PC = 1 )
        {
            cout << "Saks vs. Stein" << '\n';
            cout << "Dessverre, du tapte." << '\n';
            ++pc_score;
        }
        else if ( User == 2 && PC == 2 )
        {
            cout << "Saks vs. Saks" << '\n';
            cout << "Uavgjort!" << '\n';
            ++Uavgjort;
        }
        else if ( User == 2 && PC == 3 )
        {
            cout << "Saks vs. Papir" << '\n';
            cout << "Du vant!" << '\n';
            ++user_score;
        }
        else if ( User == 3 && PC == 1 )
        {
            cout << "Papir vs. Stein" << '\n';
            cout << "Du vant!" << '\n';
            ++user_score;
        }
        else if ( User == 3 && PC == 2 )
        {
            cout << "Papir vs. Saks" << '\n';
            cout << "Dessverre, du tapte." << '\n';
            ++pc_score;
        }
        else if ( User == 3 && PC == 3 )
        {
            cout << "Papir vs. Papir" << '\n';
            cout << "Uavgjort!" << '\n';
            ++Uavgjort;
        }
        else 
        {
            cout << "Jeg tror du har tastet feil verdi.." << '\n';
        }       
}           

【问题讨论】:

  • 首先,阅读完整的错误以找出问题的在哪里。您可以通过构建一个字符串然后打印它来减少行/else-if 语句的数量,并处理寻找获胜者的逻辑略有不同。这将帮助您避免诸如 === 混淆的错误。
  • 在哪一行?你有错误

标签: c++ random numbers


【解决方案1】:

你的错误在这一行

else if ( User == 2 && PC = 1 )

你可能是说

else if ( User == 2 && PC == 1 )
                       // ^^ 

否则,由于运算符优先级(其中 expression 不是适当的 lvalue),您会尝试将 1 分配给表达式 (User == 2 &amp;&amp; PC)。 p>

请仔细阅读编译器错误消息,并检查它们告诉出现的行!

【讨论】:

  • @user3677097 完蛋了!不用担心,即使是经验丰富的程序员,这种情况也经常发生;)...如果您在表达式中使用大括号 () 可能会更糟,它会给您留下警告而不是那么错误。
  • 感谢初学者友好的回答,非常感谢!是的,我很高兴它没有变得更糟,这实际上很尴尬。
  • 最佳实践是始终使用文字作为左值 - 1 == PC - 如果你犯了错误并写成 1 = PC - 这总是一个错误
猜你喜欢
  • 2011-09-03
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多