Вы можете проверить это следующим образом:
int x;
cin >> x;
if (cin.fail()) {
//Not an int.
}
Кроме того, вы можете продолжать вводить ввод, пока не получите int через:
#include <iostream>
int main() {
int x;
std::cin >> x;
while(std::cin.fail()) {
std::cout << "Error" << std::endl;
std::cin.clear();
std::cin.ignore(256,'\n');
std::cin >> x;
}
std::cout << x << std::endl;
return 0;
}
EDIT: Чтобы отправить комментарий ниже относительно ввода типа 10abc, можно было бы изменить цикл, чтобы принять строку в качестве входа. Затем проверьте строку для любого символа, а не числа, и соответствующим образом обработайте эту ситуацию. В этой ситуации не нужно очищать / игнорировать входной поток. Проверка строки - это просто цифры, преобразование строки обратно в целое. Я имею в виду, это было как раз от манжеты. Возможно, лучший способ. Это не сработает, если вы принимаете float / doubles (нужно добавить «.» В строку поиска).
#include <iostream>
#include <string>
int main() {
std::string theInput;
int inputAsInt;
std::getline(std::cin, theInput);
while(std::cin.fail() || std::cin.eof() || theInput.find_first_not_of("0123456789") != std::string::npos) {
std::cout << "Error" << std::endl;
if( theInput.find_first_not_of("0123456789") == std::string::npos) {
std::cin.clear();
std::cin.ignore(256,'\n');
}
std::getline(std::cin, theInput);
}
std::string::size_type st;
inputAsInt = std::stoi(theInput,&st);
std::cout << inputAsInt << std::endl;
return 0;
}
Вы можете указать собственный генератор, например так:
(require '[clojure.test.check.generators :as gen])
(gen/let [active? gen/boolean
metric (if active? (s/gen int?) (gen/return 0))]
{:active? active? :metric metric})
(gen/sample *1)
({:active? true, :metric 0} {:active? true, :metric -1} ...)
gen/let
- это макрос, который позволяет вам использовать знакомый let
-подобный синтаксис, но он расширяется до test.check fmap
и bind
звонки, которые вы также можете использовать напрямую.
Когда у вас есть собственный генератор, вы можете использовать s/with-gen
, чтобы объединить его со своей спецификацией, или передать его в карту переопределений для функций спецификаций, которые принимают переопределения генератора.