Zeichenbereich die eingegeben werden kann
-
Wie geht es, wenn ich einen Zeichenbereich eingeben will z.B.die Eingaben von User dürfen nur zwischen 0 bis 9 sein anderes wird eine Fehlermeldung ausgegeben.
Danke
-
if (eingabe -'0'>=0 && eingabe -'0'<=9){ //gut }else //schlecht
-
Ja hast schon recht aber ich glaube ich habe falsch geschrieben.Ich will einen Zahlenbereich eingeben 0-9.
Danke
-
Die einfachste Lösung wär wohl:
#include <cstdio> #include <string> // ... std::string zeile; int min, max; std::getline(std::cin, zeile); if(2 == std::sscanf(zeile.c_str(), "%d-%d", &min, &max)) { // erfolgreich eingelesen } else { // nicht erfolgreich geparst }
Ich würds wahrscheinlich mit boost.spirit machen, auch wenns hier wahrscheinlich overkill ist. Das säh dann etwa so aus:
#include <boost/spirit/core.hpp> #include <boost/spirit/utility/functor_parser.hpp> #include <iostream> #include <sstream> #include <string> struct range { int min, max; }; struct range_parser { typedef range result_t; template <typename ScannerT> int operator()(const ScannerT &scan, result_t& result) const { namespace bs = ::boost::spirit; if (scan.at_end()) return -1; bs::parse_info<typename ScannerT::iterator_t> info = bs::parse(scan.first, scan.last, bs::int_p[bs::assign_a(result.min)] >> '-' >> bs::int_p[bs::assign_a(result.max)], boost::spirit::space_p); if(info.hit) { scan.first = info.stop; return info.length; } return -1; } }; boost::spirit::functor_parser<range_parser> range_p; int main() { range r; std::string s; std::getline(std::cin, s); boost::spirit::parse_info<std::string::iterator> info = boost::spirit::parse(s.begin(), s.end(), range_p[boost::spirit::assign_a(r)]); if(info.full) { std::cout << r.min << ' ' << r.max << std::endl; } else { std::cerr << "Konnte \"" << s << "\" nicht parsen." << std::endl; } }
Das Ding ist nachher in der Anwendung flexibler, aber halt auch komplexer. Und du brauchst boost, wobei das eigentlich sowieso ne gute Idee ist.