Как вручную сбросить std :: iostream :: сбой? У меня есть цикл try-catch, который вызывает исключение, когда пользователь пытается ввести нецелую строку, однако он не генерирует исключение, если пользователь пытается ввести float, поскольку он попытается прочитать все до десятичной точки в плавающей стоимости. Мое решение состоит в том, чтобы вручную исключить исключение, если в потоке все еще остаются данные, как это сделать?Как выбросить std :: iostream сбой в C++?
/*
Sample Implementation Code in C++
Handling Inputs from User in C++
This code only stops running when the user
inputs the appropriate values. Otherwise, the program
will continue asking the user for input.
*/
#include <iostream>
#include <limits> //numeric_limits
#include <stdexcept>
int main() {
std::cin.exceptions(std::ios::failbit); // set exceptions to be thrown when a failbit is set
int num = 0;
int den = 0;
while (true) {
try {
std::cout << "Enter numerator: ";
std::cin >> num;
if(std::cin.peek() != '\n') {
//HOW TO DO THIS PART?
std::iostream::failure e;
throw e;
}
std::cout << "Enter denominator: ";
std::cin >> den;
std::cout << "The quotient is " << num/den << std::endl;
} catch (std::iostream::failure& e){
std::cout << "Input should be an integer." << std::endl;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
return 0;
}
by 'throw std :: iostream :: failure()'? – CollioTV
ошибка: нет соответствующей функции для вызова 'std :: ios_base :: failure :: failure()' – DarkPotatoKing
'std :: ios_base :: failure' имеет конструктор, который принимает строку сообщения. Что касается того, может ли быть выбрано исключение, правильная вещь сомнительна. – 0x499602D2