好的,所以这是我的代码中给我一个问题的部分。我想做的就是拿一个年级,判断它是否是有效等级,然后继续要求有效数字,如果不是。但是,它甚至不会进入循环,所以....任何建议?我已经编程了一点但我仍然很新,所以额外的解释是伟大的!这也是我第一次在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;
}
}
答案 0 :(得分:15)
您的条件是作业:b_valid=false
。它将评估为false,循环将永远不会执行。你的意思是
for(bool b_valid = false; b_valid == false; )
^^^^
有一种编码风格要求比较的常量是第一个参数,如if(false == b_valid)
。在这种情况下,如果您不小心输入=,则会出现编译错误。在任何情况下,许多编译器都会在您编写了赋值的情况下发出警告,其中布尔表达式被释放。你的不是那么软弱,或者你只是忽略了警告。
答案 1 :(得分:11)
我恭敬地不同意其他(可悲的赞成)答案。
不要将布尔值与true
或false
进行比较。
这是荒谬的,多余的并导致错误(如您的情况)。
只需测试值本身。也就是说,写! b_valid
。
此外,在这里使用for
循环显然具有误导性。请改用while
:
while (! b_valid) {
…
}
答案 2 :(得分:8)
你在循环条件('=')中使用了赋值,它应该是'==':
for (bool b_valid=false; false==b_valid; )
答案 3 :(得分:3)
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循环总是至少运行一次。
答案 4 :(得分:2)
等式比较运算符是==
。现在你的条件是b_valid=false
,只返回false
。
答案 5 :(得分:1)
=是赋值运算符
==是比较运算符
所以你的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;
}
}
答案 6 :(得分:1)
您可以将代码重构为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;
}
}