Beliebig viele Variablen in einem Vector speichern und die Eingabe jederzeit abbrechen



  • Hallo zusammen,
    mein Problem besteht darin, dass ich bei jeden Durchlauf eines Programms unterschiedlich viele Variablen in einem vector speichern möchte. In meinem Fall handelt es sich um eine Adresse ohne Hausnummer die abgespeichert werden soll. Ich habe es über eine while Schleife versucht weiß aber nicht wie ich diese wieder abbrechen kann.
    Hatte an eine if Schleife in der while schleife gedacht oder an eine andere Bedingung für die while Schleife aber ich komme auf keine Lösung, da meine Programmier-Kenntnisse sich auch noch sehr in Grenzen halten.
    Hier mein Code:

    #include <iostream>
    #include <vector>

    int main()
    {
    std::vectorstd::string fulladress;
    while (true)
    {
    std::string address{};
    std::cin >> address;
    fulladress.push_back(address);
    }

    for (int i = 0; i <= fulladress.size(); i++)
    {
    	std::cout << fulladress[i];
    }
    
    system("pause");
    return 0;
    

    }



  • @CQVER
    Was du versuchen könntest ist ein Counter hinzufügen.
    Beispielsweise fragst du einfach am Anfang wie viele Adressen hinzugefügt werden sollen.

    int main(){
    	std::vector<std::string> fullAddress;
    	int howMany; //Wie viele Adressen sollen gespeichert werden?
    	std::cout << "Wie viele Adressen wollen Sie eingeben? :";
    	std::cin >> howMany;
    	int zaehler = 0; //Zähler, damit die Schleife abbricht.
    	std::string adresses = {};
    	while( zaehler < howMany ){ //Solange der Zähler kleiner der Adressen ist, die man eingeben möchte
    		std::cin >> adresses; // Gebe Adresse ein
    		fullAddress.push_back( adresses ); //Speicher Adresse im Vector
    		zaehler++; //Zähle hoch, damit die Schleife irgendwann abbricht.
    	}
    
    // Ausgeben der Adressen
    	for( const auto& addresses : fullAddress ){
    		std::cout << addresses << std::endl;
    	}
    
    
    	return 0;
    }
    

    Das ganze kannst du natürlich mit einer for-Schleife nochmal verkürzen.

    int main(){
    	std::vector<std::string> fullAddress;
    	int howMany;
    	std::cout << "Wie viele Adressen wollen Sie eingeben? :";
    	std::cin >> howMany;
    
    	std::string adresses = {};
    	for( int i = 0; i < howMany; i++ ){
    		std::cin >> adresses;
    		fullAddress.push_back( adresses );
    	}
    
    	for( const auto& addresses : fullAddress ){
    		std::cout << addresses << std::endl;
    	}
    
    
    	return 0;
    }
    

    Beispielsweise so, wenn ich das richtig verstanden habe?
    Edit: Dein Problem war, dass du "while(true)" benutzt hast und somit weiß die Schleife natürlich nicht wann
    sie aufhören soll



  • @CQVER Du könntest auch eine do-while-Schleife nehmen und abbrechen, wenn der Inhalt von adresse „ENDE“ ist.

    Eine if-Schleife gibt es nicht, da sich dort nichts wiederholt.



  • @DirkB
    Dann würde am Ende der do-While-Schleife aber den letzten Eintrag mit dem "Ende" löschen lassen.
    Ansonsten haste den nämlich noch mit im Container und das ist natürlich dann doof.


Anmelden zum Antworten