std::cin.fail()
służy do sprawdzenia, czy poprzednie wejście powiodło się. Jest jednak bardziej idiomatyczne po prostu użyć strumienia jakby to była logiczna:
if (std::cin) {
// last input succeeded, i.e. !std::cin.fail()
}
if (!std::cin) {
// last input failed, i.e. std::cin.fail()
}
w kontekstach, gdzie składnia pozwoleniu wejściowego albo liczby o charakterze, zwykle rozwiązaniem jest, aby przeczytać it liniami (lub w jakiś inny ciąg znaków) i parsuj go; Gdy wykryjesz, że jest liczbą, możesz użyć konwersji std::istringstream
na lub dowolną liczbę innych opcji (strtol
lub std::stoi
, jeśli masz C++ 11).
Jest jednak możliwe, aby wyodrębnić dane bezpośrednio ze strumienia :
bool isNumeric;
std::string stringValue;
double numericValue;
if (std::cin >> numericValue) {
isNumeric = true;
} else {
isNumeric = false;
std::cin.clear();
if (!(std::cin >> stringValue)) {
// Shouldn't get here.
}
}
Pokaż swój kod. –
@ Shumail92 Obecnie go nie mam. –
W takiej sytuacji zwykle czytałeś postać, a następnie sprawdzałeś, czy jest to cyfra (a jeśli tak, to przekonwertuj ją na liczbę). –