leere Eingabe/Enter akzeptieren



  • Moin,

    ich möchte in C++ mehrere Strings einlesen, solange bis keine Eingabe mehr erfolgt/nur Enter gedrückt wird. Allerdings wird das Enter alleine nicht akzeptiert.

    Hier im Forum habe ich folgenden Code gefunden:

    scanf("%[^\n]s", string);
    

    Da das ganze jedoch in einer while-Schleife steht und dieser Code bei mehr als einer Anwendung sämtliche weitere Eingaben verweigert und stattdessen mit der ersten Eingabe füllt, funktioniert das nicht.

    Hat jemand andere Lösungsvorschläge?


  • Mod

    C++ oder C? Du fragst in C++, dein Codeschnipsel ist C. Vorgehensweise in beiden Sprachen: So lange Zeilen einlesen, bis eine Zeile leer ist.



  • Ja, C++ zu nutzen. Ist auch viel bequemer, sicherer und einfacher:

    int main()
    {
    	std::string s;
    	while(std::getline(std::cin, s) && s.length())
    	{
    		std::cout << s << '\n';
    	}
    }
    


  • int main()
    {
    	for(std::string obj(" ");!obj.empty();getline(std::cin,obj));
    }
    

    Ist ja aber eig. sinnlos.
    Es geht ja auch

    int main()
    {
    	std::vector<std::string> vec;
    	for(std::string obj(" ");;vec.push_back(obj))
    	{
    		getline(std::cin,obj);
    		if(obj.empty())
    			break;
    	}
    }
    

    P.S.: Wenn du im letzten Beispiel wieder ausgeben lassen möchtest, geht das so:

    C++11:

    for(const std::string& iter : vec)
        std::cout << iter << '\n';
    

    else

    for(std::vector<std::string>::iterator iter(vec.begin()); iter != vec.end(); ++iter)
        std::cout << *iter << '\n';
    


  • Was passiert da, wenn ich dir eine Datei nach stdin pipe, die keine Leerzeilen enthält?



  • seldon schrieb:

    Was passiert da, wenn ich dir eine Datei nach stdin pipe, die keine Leerzeilen enthält?

    Ich versteh überhaupt nicht, worauf du hinaus willst. Wenn da ein Fehler ist, bitte-nur herein damit....


Anmelden zum Antworten