Datei zeichenweise auslesen - newline Problem.
-
redrew99 schrieb:
Wenn ich das richtig sehe, müßte in Zeile 8 und 15 noch ein "typename" gesetzt werden, sonst kompiliert der Code nicht.
typename std::basic_istream< E, Traits >::sentry ok( in); ... for( typename Traits::int_type m = in.rdbuf()->sgetc(); ; m = in.rdbuf()->snextc() ) ...Hallo redrew99,
Natürlich habe ich den Code vorher mal durch den Compiler geschickt, aber Du hast Recht, das Visual Studio, welches ich verwende, ist da recht großzügig.
Gruß
Werner
-
Möchte ich nochmal festhalten: MSVC ist, was Templates angeht kaputt. Werner gibt mir Recht.
ICH HABE RECHT!
-
314159265358979 schrieb:
Möchte ich nochmal festhalten: MSVC ist, was Templates angeht kaputt.
Ja, Visual C++ hat einige Bugs im Bereich Templates. "Ist kaputt" ist aber vielleicht etwas übertrieben, obwohl das natürlich Ansichtssache ist.
Werner gibt mir Recht.
ICH HABE RECHT!
Ganz ruhig, Mami kommt gleich.
-
Mami ist tot. <.<
-
Hier mal ein Entwurf mit einem eigenen num_get-facet:
#include <iostream> #include <locale> class my_num_get : public std::num_get<char> { private: template <typename T> iter_type do_do_get(iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, T& v) const { bool negative = false; for ( ; in != end; ++in ) { auto c = *in; if ( c == '+' ) negative = false; else if ( c == '-' ) negative = true; else break; } auto res = std::num_get<char>::do_get( in, end, str, err, v ); if ( negative ) v = -v; return res; } virtual iter_type do_get(iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long& v) const override { return do_do_get( in, end, str, err, v ); } virtual iter_type do_get(iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, long long& v) const override { return do_do_get( in, end, str, err, v ); } virtual iter_type do_get(iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned short& v) const override { return do_do_get( in, end, str, err, v ); } virtual iter_type do_get(iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned& v) const override { return do_do_get( in, end, str, err, v ); } virtual iter_type do_get(iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned long& v) const override { return do_do_get( in, end, str, err, v ); } virtual iter_type do_get(iter_type in, iter_type end, std::ios_base& str, std::ios_base::iostate& err, unsigned long long& v) const override { return do_do_get( in, end, str, err, v ); } }; int main() { using namespace std; cin.imbue(locale(locale(""), new my_num_get()));; long long wert; for (;;) { cin >> wert; if (cin.eof()) break; if (cin) cout << wert << '\n'; else { cin.clear(); cin.ignore(1); } } }
-
Mit Makros wärs besser.
-
314159265358979 schrieb:
Mit Makros wärs besser.
Das ist eine sehr subjektive Wahrheit. Dein Fetisch wird nämlich nicht allgemein geteilt.
-
Es wird:
- Besser lesbar
- Besser wartbar
- Die Fehlerwahrscheinlichkeit reduziertAlso ja, mit Makros ist es besser.
-
314159265358979 schrieb:
Es wird:
- Besser lesbar
- Besser wartbar
- Die Fehlerwahrscheinlichkeit reduziertAlso ja, mit Makros ist es besser.
Nein.
Nein.
Nein.
Nein.
-
Troll or just stupid?