std::cin.ignore(std::cin.rdbuf()->in_avail()); geht nicht
-
Hallo
ich möchte auf der Konsole in einer Endlosschleife jeweils eine beliebige Anzahl von Integern einlesen. Das Ende des Einleseprozesses in einem Schleifendurchlauf soll durch eingabe von EOF (Strg+Z) simuliert werden.
Hier mein Code:for(std::istream_iterator<commands_t::key_type> it(std::cin); it!=std::istream_iterator<commands_t::key_type>(); ++it) { add_arg(*it,commands,&args); } std::cin.ignore(std::cin.rdbuf()->in_avail());Leider funzt das so nicht. Das std::cin.ignore(std::cin.rdbuf()->in_avail()); funktioniert nicht, und nach dem ersten Schleifendurchlauf std::istream_iterator<commands_t::key_type> immer std::istream_iterator<commands_t::key_type>(), egal was ich mache. Was ist falsch?
-
for(commands_t::key_type tmp; std::cin >> tmp; ) { add_arg(tmp, commands, &args); } std::cin.ignore(std::cin.rdbuf()->in_avail()); std::cin.clear(); //fehlerflags löschen!?
bb
-
Nope, löst das Problem nicht.
-
aber das hier compiliert bei dir (auch):
#include <iostream> #include <vector> int main() { std::vector<int> container; for(int tmp; std::cin >> tmp; container.push_back(tmp)) ; std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail()); bool asd; std::cin >> asd; }?
bb
-
Jep, das funktioniert wunderbar. Komisch...
-
hast du meinen code von oben mal mit copy&paste übernommen und probiert? wenn du ihn nur abgetippt hast, dann hast du dich wahrscheinlich irgendwo vertan...
bb
-
unskilled @logged-off schrieb:
hast du meinen code von oben mal mit copy&paste übernommen und probiert? wenn du ihn nur abgetippt hast, dann hast du dich wahrscheinlich irgendwo vertan...
bb
Ah, ich trottle habe nur das cin.ignore übernommen, nicht aber den neuen Schleifenkopf.
Danke, jetzt funzt es!
-
np - nächstes mal gleich richtig lesen ^^
bb