【发布时间】:2020-10-13 10:30:44
【问题描述】:
目标是计算分数超过 10 的百分比。分数介于 0 和 20 之间。当我单击“N”时,while 循环出现问题。我得到一个无限循环。
#include <iostream>
int main() {
float MARK, PERCENTAGE;
int NBR_MARK, NBR_MARK_10;
MARK = 0;
NBR_MARK = 0;
NBR_MARK_10 = 0;
PERCENTAGE = 0;
char R = 'N';
std::cout << "Enter a mark ?" << std::endl;
std::cin >> MARK;
while (MARK < 0 || MARK > 20) {
std::cout << " Please, enter a mark between 0 and 20" << std::endl;
std::cin >> MARK;
}
std::cout << "Do you want to enter a new mark ?" << std::endl;
std::cout << "Click on 'O' to continue and on 'N' to stop" << std::endl;
std::cin >> R;
if ((R != 'N') || (R != 'n'))
std::cout << "You will continue" << std::endl;
do {
std::cout << "Enter a new mark" << std::endl;
std::cin >> MARK;
std::cout << std::endl;
while ((MARK < 0) || (MARK > 20)) {
std::cout << "Please, enter a mark between 0 and 20" << std::endl;
std::cin >> MARK;
std::cout << std::endl;
}
NBR_MARK++;
if (MARK > 10) NBR_MARK_10++;
std::cout << "To stop press 'N'" << std::endl;
std::cin >> R;
}
while ((R != 'N') || (R <= 'n'));
PERCENTAGE = NBR_MARK_10 / NBR_MARK * 100;
std::cout << "Le % de notes > 10 est de: " << PERCENTAGE << " %" << std::endl;
return 0;
}
【问题讨论】:
-
错字?
(R <= 'n') -
您的代码中向用户提供的说明让我有些困惑。您说“单击...”或“按 N”,但您使用
cin并且用户需要按下键然后按 Enter。输入到底是什么? -
while ((R != 'N') || (R <= 'n'));这可能是导致您的问题的原因 -
@Caleth 非常感谢您的反馈。我已经更正了错字,但是当我想停止添加标记时,我仍然有一个无限循环。
-
@ColdCerberus 非常感谢您的反馈。我已经纠正了。正如我刚刚向 Caleth 提到的那样,当我选择布尔值“N”时,我找不到解决无限循环的方法。
标签: c++ while-loop boolean infinite-loop