Komme bei einer Aufgabe bzgl. String und Array nicht mehr weiter



  • #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    using namespace std;
    
    int main()
    {
      cout << " Messreihe! " << endl;
      cout << "Bitte geben Sie 15 Werte zwischen 2.0 und 12.0 ein!" << endl;
    
      vector<float> values;
    
      while( values.size() != 15 )
      {
        string buffer; 
        cin >> buffer;
    
        stringstream ss(buffer);
        float value;
        if( ss >> value )
        {
            if( value >= 2 && value <= 12 )
              values.push_back( value );
        }
      }
    }
    

    Hilft das dir ?



  • Dein Code ist zwar sehr interessant, aber er hilft mir nicht wirklich, da ich nicht weiß, was Du mit Vector meinst?? Sorry, aber das hatte ich noch nicht...



  • Die halbe Hausaufgabe habe ich ja schon für dich gemacht 😉

    Schau dir std::vector an und wenn du es unbedingt mit CArrays machen musst tausch vector aus gegen:

    #include <iostream>
    #include <string>
    #include <sstream>
    using namespace std;
    
    int main()
    {
      cout << " Messreihe! " << endl;
      cout << "Bitte geben Sie 15 Werte zwischen 2.0 und 12.0 ein!" << endl;
    
      float values[14];
      int counter = 0;
    
      while( ( sizeof( values ) / sizeof(float) ) != 14 )
      {
        string buffer;
        cin >> buffer;
    
        if( buffer.size() == 0 )
            break;   
    
        stringstream ss(buffer);
        float value;
        if( ss >> value )
        {
            if( value >= 2 && value <= 12 )
            {
                values[counter] = value;
                counter++;
            }
        }
      }
    }
    


  • UPS

    if( buffer.lenght() == 0 )
    

  • Mod

    sizeof( values ) / sizeof(float) ➡ sizeof( values ) / sizeof(*values)
    🙂



  • Ganz ehrlich, hätte ich gewusst dass ich auch Komplettlösungen posten darf...

    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    #include <iterator>
    #include <iomanip>
    
    int main()
    {
            std::vector<float> vec;
            for(std::string str;vec.size() < 15;)
            {
                    std::getline(std::cin, str);
    
                    if(!str.length())
                            break;
    
                    std::istringstream stream(str);
    
                    float const f = *std::istream_iterator<float>(stream);
                    if(f >= 2 && f <= 12)
                            vec.push_back(f);
            }
    
            std::cout << std::fixed << std::setprecision(2);
            for(size_t i = 0;i < vec.size();++i)
                    std::cout << i + 1 << ".\t" << vec[i] << '\n';
    }
    


  • toll er weiß nicht mal was std::vector ist und dann kommst du mir sowas 😃



  • meepmeep schrieb:

    toll er weiß nicht mal was std::vector ist und dann kommst du mir sowas 😃

    🤡 🤡
    Ich kann natürlich auch eine einfachere Lösung basteln, aber die wird dann etwas länger...



  • Ich wollte keine Komplettlösung, sondern ehrlich gesagt "nur" Tipps, wie ich meinen Code umändern muss, damit da was gescheites raus kommt...

    Nichts gegen euch... aber bei zwei Drittel der Codes frage ich mich, warum das so gemacht worden ist....

    Wie schon geschrieben, ich will keine Komplettlösung ... sondern viel mehr Tipps und Tricks...

    Also nochmal ganz konkret... was ist an meinem Code falsch?????



  • Dein Code ist nicht falsch, er ist einfach "an der Aufgabenstellung vorbei".
    (Und er hat ein paar Unschönheiten, z. B. Makros für Konstanten)

    Ich habe dir ein paar Tips gegeben, btw.


  • Mod

    silent_max schrieb:

    Also nochmal ganz konkret... was ist an meinem Code falsch?????

    Die Aufgabenstellung verlangt eben den Umweg über einen String. Das ist keine tolle Aufgabenstellung, aber ist nun einmal so. Du hast es so gelöst, wie ein normaler Mensch das machen würde.

    Vorgeschlagene Änderungen, der Reihe nach vorzunehmen:
    0. Eine Ausgabe einbauen, damit du die Programmfunktion kontrollieren kannst
    - Erst einmal eine einfache Ausgabe, nicht gleich wie in Aufgabe 2
    1. Auf String umstellen:
    - String mit getline einlesen
    - String in Stringstream stopfen
    - Zahl aus dem stringstream holen
    - Zahl wie gehabt speichern
    2. Abbruchbedingung umformulieren. Die Aufgabenstellung verlangt Abbruch bei einer leeren Zeile.
    - Dafür baust du eine Prüfung ein.
    3. Wertebereich prüfen. Die Zahlen sind nur gültig zwischen 2 und 12.
    - Dafür baust du eine Prüfung ein
    - Achtung mit den Indizes! Bei einer Eingabe im falschen Bereich darf der Zählindex des Arrays nicht weiter gesetzt werden, sonst hast du später Lücken drin. hierfür bietet es sich an, die for-Schleife durch eine passende while- oder do-while-Schleife zu ersetzen.
    4. Die Ausgabe so gestalten wie in Aufgabe 2:
    - Dazu sollten schon genügend Hinweise gekommen sein.


Anmelden zum Antworten