C++程序不会进入循环

sam*_*oul 4 c++ for-loop boolean

好吧,所以这是我的代码中给我一个问题的部分.我想做的就是拿一个年级,判断它是否是有效等级,然后继续要求有效数字,如果不是.但是,它甚至不会进入循环,所以....任何建议?我已经编程了一点但我仍然很新,所以额外的解释是伟大的!这也是我第一次在for循环中使用布尔值.

for (bool b_valid=false; b_valid=false ; )
{
cin >> n_grade;
b_valid = true;
    if (n_grade>100 || n_grade<0)
        {
            cout << "Invalid grade: Re-enter a number between 0-100 : " << endl;
            cin >> n_grade;
            b_valid = false;
        }
}
Run Code Online (Sandbox Code Playgroud)

Arm*_*yan 15

你的条件是一项任务:b_valid=false.它将评估为false,循环将永远不会执行.你的意思是

for(bool b_valid = false; b_valid == false; )
                                 ^^^^ 
Run Code Online (Sandbox Code Playgroud)

有一种编码风格要求比较的常量是第一个参数,比如if(false == b_valid).在这种情况下,如果您不小心输入=,则会出现编译错误.在任何情况下,许多编译器都会在您编写了赋值的情况下发出警告,其中布尔表达式被释放.你的不是那么软弱,或者你只是忽略了警告.


Kon*_*lph 11

我恭敬地不同意其他(可悲的是投票)的答案.

不要将布尔值与任何一个true或false.

这是荒谬的,多余的并导致错误(如您的情况).

只需测试值本身.就是写! b_valid.

此外,for在这里使用循环是公然误导.while改为使用:

while (! b_valid) {
    …
}
Run Code Online (Sandbox Code Playgroud)

  • 绝对真理! (3认同)

Vla*_*mir 8

你在循环条件('=')中使用赋值,它应该是'==':

for (bool b_valid=false; false==b_valid; )
Run Code Online (Sandbox Code Playgroud)