嘿,这真的让我感到不安。
我正在尝试验证循环中的用户输入。
我需要用户输入介于0到60之间。我可以验证它没有问题,但是我想要它做的是,如果输入不正确,请重新询问上一个问题,您知道吗?像这样重复循环吧
int main()
{
//Constants
const int MAXROUNDS = 4;
const int NUMARCHERS = 3;
//Variables
int archerNum;
int roundNum;
double score;
double total;
//Start of outer loop, this loop displays each Archer
for (archerNum = 1; archerNum <= NUMARCHERS; archerNum++)
{
total = 0; //This clears the total for the archer
//Start of second loop, this loop displays each round
for (roundNum = 1; roundNum <= MAXROUNDS; roundNum++)
{
cout << "Enter Round " << roundNum << " score for Archer "
<< archerNum << ": ";
cin >> score;
if (score < 0 | score > 60)
{
cout << "ERROR! Number must be between 0 and 60!";
}
}
total = score + score + score + score; //This calculates the total score for the tournament
cout << "\nThe total score for archer " << archerNum << " is: "
<< total << "\n\n";
}
return 0;
}
这是我的代码^
现在我已经尝试了很多东西。我浏览了我的教科书,并用Google搜索了所有内容,但似乎找不到答案。
我尝试将错误消息放入do-while循环中 我用过if-else语句 我用过while循环 我想我实际上已经使用了每种不同类型的循环,但我仍然似乎无法弄清楚,这让我感到非常沮丧。
预先感谢
答案 0 :(得分:0)
这里是数字输入和错误消息的简单版本:
//#include "pch.h" if using Visual Studio 2017
#include <iostream>
using namespace std;
int main(){
cout << "Please enter a number between 0 and 60." << endl;
int input;
cin >> input;
while(input < 0 || input > 60 || cin.fail()){ //Using cin.fail() here in case the user enters a letter or word
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cerr << "Number must be between 0 and 60. Please try again." << endl;
cin >> input;
}
return 0;
}`
不过,您也可以使用goto
语句,因为我确信此站点上的许多其他语句都会告诉您,不建议这样做,因为这会导致臭名昭著的“意大利面条代码”。
答案 1 :(得分:-1)
只需在验证If语句内添加roundNum -= 1;
。它将使计数器减少1,然后重新询问上一个问题
//Start of second loop, this loop displays each round
for (roundNum = 1; roundNum <= MAXROUNDS; roundNum++)
{
std::cout << "Enter Round " << roundNum << " score for Archer "
<< archerNum << ": ";
std::cin >> score;
if (score < 0 || score > 60)
{
std::cout << "ERROR! Number must be between 0 and 60!"<<endl;
roundNum -= 1; //or roundNum--
}
}
答案 2 :(得分:-2)
尝试:
bool inputError;
do {
inputError = false;
std::out << "Enter Round "
<< roundNum
<< " score for Archer "
<< archerNum << ": ";
if (std::cin >> score) {
if (score < 0 || score > 60)
{
std::cout << "ERROR! Number must be between 0 and 60!";
inputError = true;
}
}
else {
std::cout << "ERROR! Your input must be a number";
inputError = true;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max());
}
} while(inputError == true);