String Aufgabe: 5 Sätze per for-Schleife einlesen und wieder ausgeben - gelöst



  • Hallo und guten Abend liebe Gemeinde.

    Wir haben folgende Aufgabe bekommen:
    Schreiben Sie ein Programm, bei dem man fünf Sätze eingeben kann und das die per Tastatur eingegebenen Sätze wieder ausgibt.

    Mein folgender Ansatz war der:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()
    {
      string Satz;
    
      cout << "Geben Sie fuenf Saetze ein!\n";
    
      for (int i=0; i<5; i++)
      {
        cout << "Satz[" << i << "]: ";
        getline(cin, Satz);
      }
    
      cout << "\n";
      cout << "Das haben Sie eingegeben:\n";
      cout << "\n";
    
      for (int i=0; i<5; i++)
      {
        cout << "Satz[" << i << "]: " << Satz << "\n";
      }
    
      return 0;
    }
    

    Da mir aber immer der letzte eingegebene Satz ausgegeben wird, zeigt mir, dass es nicht so klappt, wie ich mir das vorstelle.

    Hätte einer von euch einen Lösungstipp?

    Danke für die Antworten im Voraus.

    Gruß

    Max



  • du musst die einzelnen sätze ja irgendwie speichern, jetzt überschreibst du ja jedes mal den string satz und in der der zweiten for-schleife wird dann 5 mal der gleiche satz ausgegeben. mein vorschlag zum speichern: std::vector
    hier ist ein besipiel, wie man ein element hinzufügt, hier, wie man ein element wieder ausgibt.
    und hier ist mein beispiel dazu 😉

    #include <iostream>
    #include <vector>
    
    int main()
    {
        std::vector<int> vec; //in meinem vector werden integer gespeichert (deshalb steht da ein int), du müsstest dann halt bei dir string nehmen)
    
        int tmp; //temporäre varibale
        std::cin >> tmp; // int einlesen
        vec.push_back(tmp); //temporäre variable in vector speichern
    
        std::cout << "int:" << vec[0] << "\n"; //variable, die im vector, steht ausgeben
    }
    


  • vario-500 schrieb:

    du musst die einzelnen sätze ja irgendwie speichern, jetzt überschreibst du ja jedes mal den string satz und in der der zweiten for-schleife wird dann 5 mal der gleiche satz ausgegeben. mein vorschlag zum speichern: std::vector
    hier ist ein besipiel, wie man ein element hinzufügt, hier, wie man ein element wieder ausgibt.

    Mit Vektoren haben wir im Unterricht (noch) gar nicht gearbeitet... Würde das auch über einen ganz normalen 5elementigen Array gehen??

    Edit:

    Die Aufgabe bzw. die Lösung der Aufgabe ist wie folgt:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()
    {
      string Satz[5];
    
      cout << "Geben Sie fuenf Saetze ein!\n"
    
      for(int i=0; i<5; i++)
      (
        cout << "Satz[" << i << "]: ";
        getline(cin, Satz[i]);
      )
    
      cout << "\n";
      cout << "Das haben Sie eingegeben: \n";
      cout << "\n";
    
      for(int i=0; i<5; i++)
      (
        cout << "Satz[" << i << "]: " << Satz[i] << "\n";
      )
    
      return 0;
    }
    


  • ja geht natürlich auch.



  • vario-500 schrieb:

    ja geht natürlich auch.

    Siehe meinen Edit.



  • silent_max schrieb:

    for(int i; i<5; i++)
    

    Undefiniert. Du musst i initialisieren, so wie du es in der anderen Schleife auch gemacht hast.



  • liest du eigentlich die fehlermeldung von compiler ? mir ist jetzt gerade erst aufgefallen, das deine for-schleife normale klammern hat und keine geschweiften, dass dürfte so eigentlich nicht klappen.

    for(...) //runde klammern
    { // geschweifte klammern
    ...
    }
    


  • Hier der Code per Copy&Paste

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string Satz[5];
    
    	cout << "Geben Sie fuenf Saetze ein!\n";
    
    	for (int i=0; i<5; i++)
    	{
    		cout << "Satz[" << i <<"]: ";
    		getline(cin, Satz[i]);
    	}
    
    	cout << "\n";
    	cout << "Das haben Sie eingegeben: \n";
    	cout << "\n";
    
    	for (int i=0; i<5; i++)
    	{
    		cout << "Satz[" << i << "]: " << Satz[i] << "\n";
    	}
    
    	cout << "\n";
    	return 0;
    }
    


  • 👍 wird doch langsamm 🙂


Anmelden zum Antworten