// ConsoleApplication6.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <limits>
int getInput() {
while (true) {
std::cout << "Indtast fire point-tal mellem 0 og 100: ";
int number = 0;
int number2 = 0;
int number3 = 0;
int number4 = 0;
std::cin >> number;
std::cin >> number2;
std::cin >> number3;
std::cin >> number4;
int sum;
sum = (number + number2 + number3 + number4) / 4;
std::cout << "\n";
if (std::cin.eof()) {
std::cout << "Fejl, prøv igen!\n";
std::cin.clear();
continue;
}
if (std::cin.bad() || std::cin.fail()) {
std::cout << "Ugyldigt input (fejl i input af tal).\n";
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
continue;
}
if (sum < 0 || sum > 100) {
std::cout << "Ugyldigt input, det skal være mellem 0 og 100!.\n";
continue;
}
return sum;
}
// unreachable
return 0;
}
int main() {
int sum = getInput();
std::cout << "Gennemsnittet af antal point: ";
std::cout << sum << std::endl;
if (sum >= 90) {
puts("Karakter: \n");
puts("12");
}
else if (sum >= 80) {
puts("Karakter: \n");
puts("10");
}
else if (sum >= 70) {
puts("Karakter: \n");
puts("7");
}
else if (sum >= 60) {
puts("Karakter: \n");
puts("4");
}
else if (sum >= 50) {
puts("Karakter: \n");
puts("02");
}
else {
puts("Karakter: \n");
puts("00");
}
}目前,我的代码处理负输入的方式与正输入相同。但是我想实现一个"if“,它过滤负数,返回一个错误,可能还会重新启动循环。我该怎么做?
getInput()检索4个数字输入,如果将字母作为输入提交,如果输入不在0-100之间,则会出现错误。
发布于 2022-09-06 09:23:19
如果输入数字为负数,您可以创建一个inputPositive函数来读取输入,并将布尔值设置为true:
void inputPositive(int& number, bool& negative) {
std::cin >> number;
if (number < 0) {
negative = true;
}
}然后你可以调用这4个数字的这些函数。如果设置了负标志,我们使用continue;来返回while(true)的开始
while (true) {
std::cout << "Indtast fire point-tal mellem 0 og 100: ";
bool negative = false;
int number = 0;
int number2 = 0;
int number3 = 0;
int number4 = 0;
inputPositive(number, negative);
inputPositive(number2, negative);
inputPositive(number3, negative);
inputPositive(number4, negative);
if (negative) {
std::cout << "Invalid. Input only positive numbers\n\n";
continue;
}
//...
}产出:
Indtast fire point-tal mellem 0 og 100: 10 20 30 -40
Invalid. Input only positive numbers
Indtast fire point-tal mellem 0 og 100: 10 20 30 40
Gennemsnittet af antal point: 25您应该在函数中使用std::array。它将缩短您的代码长度,并允许使用像std::accumulate这样的特性来计算和:
bool negative = false;
std::array<int, 4> numbers;
for (auto& i : numbers) {
inputPositive(i, negative);
}
auto sum = std::accumulate(numbers.begin(), numbers.end(), 0) / numbers.size();https://stackoverflow.com/questions/73619255
复制相似问题