mehrfaches Lesen von cin?



  • hey leute

    juuu, erster beitrag! 🙂

    bin ziemlich neu unterwegs mit C++ und hab da eine frage bezüglich cin & istream.
    wir sollen ein kleines progrämmchen schreiben, dass die eingabe eines benutzers ständig mit einem wert vergleicht, der *vorher* vom selben benutzer eingegeben wurde, kurz: ein kleines rechenprogrämmchen.

    das programm soll zuerst 2 zahlen einlesen und diese zusammenzählen. dann soll diese rechnung (die addition der beiden zahlen) dem benutzer solange gestellt werden, bis dieser die richtige eingabe macht, spricht, es muss immer wieder gelesen werden.

    hier ist mal ein anfang, wie ich das bis jetzt versucht hab:

    #include <iterator>
    #include <vector>
    #include <algorithm>
    #include "func.hpp"
    
    using namespace std;
    
    int main(){
    	int res1 = 0;
    	int res2 = 0;
    	istream_iterator<int> eof;
    
    	vector<int> v(istream_iterator<int>(cin),eof);
    	res1 = v[0] + v[1];
    ....
    

    nun, komme ich nicht mehr richtig weiter.
    wenn ich diese erste eingabe der beiden zahlen gemacht hab, muss ich, damit diese beiden zahlen eingelesen werden CTRL-Z drücken. somit ist der stream allerdings auch abgebrochen und kann so nicht wieder aufgemacht werden.

    bin ich hier total auf dem holzweg oder übersehe ich etwas?
    kann mir jemand einen vorschlag oder einen Tipp geben, wie ich das problem lösen kann?

    danke für die hilfe!

    mfg
    rox



  • Hallo,

    wenn ich ich richtig verstanden habe, gibt der User zwei Zahlen ein, das Programm errechnet die Summe. Jetzt muss der Benutzer das auch tun und wird solange nach der korrekten Summe gefragt, bis er sie halt eingiebt. Stimmt das?

    Geht nämlich ganz einfach:

    #include <iostream>
    
    using namespace std;
    
    int main() {
      int res1=0,res2=0;
    
      //Zahlen einlesen
      cout<<"\nErste Zahl: ";
      cin>>res1;
    
      cout<<"\nZweite Zahl: ";
      cin>>res2;
    
      res1+=res2;  //ok, res1 ist jetzt Summe aus res1 und res2
    
      //Schleife durchlaufen lassen bis er das richtige Ergebnis eingibt...
      int t=0;
      do {
        cout<<"\n\nBitte Summe eingeben: ";
        cin>>t;
      } while(t!=res1);
    
      return 0;
    };
    

    MfG

    GPC



  • hey

    danke für die antwort!
    ja, das habe ich schon gewusst, dass man das so lösen kann!
    aber gibt es auch eine möglichkeit mit diesem vektor zu arbeiten?

    sprich, kann ich das ganze zweimal ausführen auf irgendeine weise?
    weil einfach zweimal einen vektor mit meiner variante anlegen geht nicht, d.h. beim zweiten mal wird nicht wieder ein istream aufgemacht, bei welchem man eingaben machen kann.

    also eigentlich möchte ich die beiden anfangszahlen miteinander eingeben. dann soll es mir die summe daraus berechnen und dann den benutzer nach dem richtigen resultat fragen, wenn möglich alles im selben stream.

    geht das irgendwie?

    mfg



  • roxor schrieb:

    aber gibt es auch eine möglichkeit mit diesem vektor zu arbeiten?

    ja, schon, aber das ist so konstruiert bei dieser Aufgabe, hier macht n vector kein Sinn.

    sprich, kann ich das ganze zweimal ausführen auf irgendeine weise?

    ganz normal reinlesen ist am Einfachsten:

    int i=0;
    do {
      cin>>i;
      vec.push_back(i);
    } while(i!=0);
    

    Aber das ist nicht so, wie du dir das vorstellst, richtig?!

    also eigentlich möchte ich die beiden anfangszahlen miteinander eingeben. dann soll es mir die summe daraus berechnen und dann den benutzer nach dem richtigen resultat fragen, wenn möglich alles im selben stream.

    du kannst bei cin ja auch mehrere Werte einlesen...

    mfG

    GPC



  • hmm...okay, habs mal so gelöst!
    werd' mal noch unseren dozenten fragen, obs da ne andere möglichkeit gäbe, diese war mir soweit bekannt!

    ist aber auch einfacher als mein konstrukt! 😉

    danke für die antworten!
    mfg



  • wenn ich diese erste eingabe der beiden zahlen gemacht hab, muss ich, damit diese beiden zahlen eingelesen werden CTRL-Z drücken. somit ist der stream allerdings auch abgebrochen und kann so nicht wieder aufgemacht werden.

    Wie wäre es, wenn du den stream-status einfach wieder auf good setzt? ;).

    roxor schrieb:

    hmm...okay, habs mal so gelöst!
    werd' mal noch unseren dozenten fragen, obs da ne andere möglichkeit gäbe, diese war mir soweit bekannt!

    ist aber auch einfacher als mein konstrukt! 😉

    danke für die antworten!
    mfg

    Hast du da irgendwie eine Aufgabe bekommen, die besagt, dass du das Problem mit Hilfe von std::vector und istream_iterator lösen sollst? Oder hast du dich einfach gefragt, wie du das Problem am kompliziertesten lösen kannst?

    Gruß Caipi


Anmelden zum Antworten