繁体   English   中英

C ++程序不会进入循环

[英]C++ Program won't enter for loop

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

您的条件是作业: b_valid=false 它将评估为false,循环将永远不会执行。 你的意思是

for(bool b_valid = false; b_valid == false; )
                                 ^^^^ 

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

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

不要将布尔值与truefalse

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

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

此外,在这里使用for循环是公然误导。 使用while不是:

while (! b_valid) {
    …
}

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

for (bool b_valid=false; false==b_valid; )
for( a; b; c ) { body; }

是相同的(范围除外)

a;
while (b) {
   body;
   c;
}

让我们为您的代码执行此操作:

bool b_valid=false;
while (b_valid = false) { // uh-oh

我们不需要再进一步了。 这是一项任务,而非比较。 它将b_valid设置为false,然后检查它是否为真。 从来没有,循环永远不会运行。

但你真正想要的是一个do / while循环:

bool b_valid;
do {
    cin >> n_grade;
    if ( n_grade>100 || n_grade<0 ) {
        cout << "Invalid grade: Re-enter a number between 0-100 : " << endl;
        // let the next pass through the loop re-read n_grade
        b_valid = false;
    }
    else {
        b_valid = true;
    }
} while (!b_valid);

do-while循环总是至少运行一次。

等于比较运算符是== 现在你的条件是b_valid=falseb_valid=false返回false

=是赋值运算符
==是比较运算符

所以你的for循环约束不检查任何东西......

或者使用while循环:

bool b_valid = false;
cin >> n_grade;
while(!b_valid){
   if(n_grade>100 || n_grade<0) {
      b_valid = true;
   } else {
      cout << "Invalid grade: Re-enter a number between 0-100 : " << endl;
      cin >> n_grade;   
   }
}

您可以将代码重构为while循环。 例如:

bool b_valid = false;
while( !b_valid )
{
    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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM