Arrayelemente schreiben und lesen



  • Schauen ob lesen funktioniert
    wenn ja: einfügen
    wenn nein: Eingabe Puffer leeren
    Index erhoehen

    Falsch... ^^
    Dein Prinzip ist daneben. Es macht nicht was der TE will, denn die Extraktion ist formatiert und wartet bis ein Zeichen eingegeben wird was kein Whitespace ist - zum zweiten Mal...



  • Sone schrieb:

    Dein Prinzip ist daneben.

    Warum ist Deiner Meinung nach das Prinzip daneben?
    Die erste Ausführung in C++ kränkelt etwas...

    Aber ich kann es nach dem Prinzip(bzw. dem ersten) in ausreichender Qualität auch ordentlich hinbekommen und das newline schlucken...

    double  tmp;
    std::string s;
     if(std::getline(cin,s))
       if(std::stringstream(s) >> tmp)
         arr[j]=tmp;
    ++j;
    


  • Furble Wurble schrieb:

    Sone schrieb:

    Dein Prinzip ist daneben.

    Warum ist Deiner Meinung nach das Prinzip daneben?
    Die erste Ausführung in C++ kränkelt etwas...

    Aber ich kann es nach dem Prinzip(bzw. dem ersten) in ausreichender Qualität auch ordentlich hinbekommen und das newline schlucken...

    double  tmp;
    std::string s;
     if(std::getline(cin,s))
       if(std::stringstream(s) >> tmp)
         arr[j]=tmp;
    ++j;
    

    Ach, so meinst du das!
    Ich hab verstanden du willst direkt aus cin extrahieren.



  • Sone schrieb:

    Ich hab verstanden du willst direkt aus cin extrahieren.

    Ja.
    Das war auch mein ursprünglicher Plan.

    Aber Du und mein Compiler wussten es besser....

    Prinzipiell war's richtig ("schauen ob lesen funktioniert"), allein C++s Besonderheiten brachten mich zu Fall... 🙂

    Danke! und
    evtl. ist das auch ein Signal an den TE, warum kurze kompilierbare Beispiel von Nutzen sind! 🙂



  • Werde ich ab sofort beherzigen, aber was soll ich machen, wenn der Programmcode wirklich nur drei Switch Anweisungen enthält, aber doch so lang ist??

    Gruß

    Max



  • Ich habe es schon wie Furble Wurble gemeint.

    Gruß



  • Sone schrieb:

    Ich hab verstanden du willst direkt aus cin extrahieren.

    #include <limits>
    #include <vector>
    #include <iostream>
    
    void clear_istream( std::istream &is )
    {
    	is.clear();
    	is.ignore( std::numeric_limits< std::streamsize >::max(), '\n' );
    }
    
    int main()
    {
    	int input = 0;
    
    	std::vector< int > numbers;
    
    	for( std::size_t i = 0; i < 10; ++i ) {
    
    		while( !( std::cin.peek() == '\n' || std::cin >> input ) ) {
    
    			std::cout << "Input error, try again!\n";
    			clear_istream( std::cin );
    		}
    
    		numbers.push_back( input );
    		input = 0;
    		clear_istream( std::cin );
    	}
    
    	for( std::size_t i = 0; i < 10; ++i )
    		std::cout << numbers[i] << '\n';
    }
    


  • Hui, peek hab' ich ganz vergessen. 🙂



  • silent_max schrieb:

    Wert[8] und Wert[9] sollen durch Betätigung von Enter keinen Wert aufnehmen, während Wert[i] dennoch inkrimentiert.

    Wie kann ich das bewerkstelligen???

    Hallo Max,

    wenn Du die Helferlein is_endl und skipline zur Verfügung hast - würdest Du es dann hin bekommen?

    Gruß
    Werner



  • So weit wie Du Werner bin ich noch lange nicht.

    Gruß



  • Hallo Max,

    silent_max schrieb:

    So weit wie Du Werner bin ich noch lange nicht.

    Brauchst Du ja auch nicht. Du sollst die beiden Funktionen auch nicht selber schreiben, sondern nur benutzen. Ich dachte etwa in der Art:

    if( is_endl( cin ) ) // ist die Zeile leer?
                cout << "keine Eingabe" << endl;
            else if( cin >> wert >> skipline ) // nein, Zeile nicht leer, dann 'wert' lesen und Rest der Zeile überspringen
            {
                cout << "Ihre Eingabe: " << wert << endl;
                // .. wert speichern, oder was auch immer
            }
    

    Ist das verständlich?

    Gruß
    Werner



  • Werner Salomon: Falls dir die Zeit zur Verfügung steht, hast du schon einmal darüber nachgedacht, einen Artikel über die Parser-Fähigkeiten von std::istream zu schreiben? Davon könnten viele Leute profitieren (ich eingeschlossen). Müsste nicht zu sehr ins Detail über Stream-Interna gehen, darüber gibt es hier schon einen Artikel. Aber halt die netten Tricks mit operator>> , um nicht alles mit getline() und std::string zu zerstückeln 🙂


Anmelden zum Antworten