Вы говорите "10 положительных входов", но у вас есть int number;
.Если ваш number
будет целым числом, то он не может принимать дроби, например 33.44
, и также не может быть NaN
(так что вам не нужно проверять это).Если вы хотите разрешить дроби, вместо этого выполните double number
.Кроме того, проверка может выглядеть следующим образом:
for (int i = 0; i < 10; i++) {
std::cin >> number;
if (std::cin.fail()) {
std::cin.clear();
std::string input;
std::cin >> input;
std::cout << "input failed! Invalid input: " << input << std::endl;
return -1;
}
После каждого введенного числа выполняется проверка std::cin.fail()
.Если это не удалось, вы можете просто вернуться.В этом примере я также распечатал неверный ввод.Для этого вам нужно вызвать std::cin.clear();
, чтобы сбросить этот флаг ошибки, и затем вы можете поместить этот неверный ввод в std::string
(который должен работать, в отличие от number
).Для этого вам нужно включить <string>
.Если вам не нужно ничего печатать, вы можете просто return
и забыть об очистке, строке и выводе.Кроме того, в этом примере, поскольку беспорядок, созданный неверным вводом, аккуратно вычищен, вы можете снова взять больше (допустимых) входных данных, если не взамен return
.
Далее, проверка на отрицательные числа:
if (number < 0) {
std::cout << "Error: Negative number!" << std::endl;
return -1;
}
Наконец, проверка NaN
(для double
):
if (isnan(number)) {
std::cout << "Error: number is NaN!" << std::endl;
return -1;
}
Вам необходимо включить <math.h>
для isnan
.
Если сложить все вместе, это может выглядеть так:
#include <iostream>
#include <string> // std::istream >> std::string
#include <math.h> // isnan
int main() {
double number;
for (int i = 0; i < 10; i++) {
std::cin >> number;
if (std::cin.fail()) {
std::cin.clear();
std::string input;
std::cin >> input;
std::cout << "input failed! Invalid input: " << input << std::endl;
return -1;
}
if (number < 0) {
std::cout << "Error: Negative number!" << std::endl;
return -1;
}
if (isnan(number)) {
std::cout << "Error: number is NaN!" << std::endl;
return -1;
}
}
return 0;
}