Fehlersuche,Programm soll Name und Alter einlesen, nur wenige Zeilen



  • Hallo erstmal an alle.Bin gerade dabei mich in die C++ Welt einzuarbeiten.Kurz zu mir,werde nächstes Jahr mein Informatikstudium beginnen und will da ein wenig eintauchen.Bearbeite gerade das Buch von Bjarne Stroustrup.

    Das Programm gibt nicht das aus was ich möchte.

    #include <iostream>
    int main ()
    {

    std::cout << "Nico33\n";
    std::string first_name;
    int age;
    std::cin >> first_name;
    std::cin >> age;
    std::cout << "Hallo" << first_name << "(Alter" << age << ")\n";

    }

    // ausgeben sollte das Programm:
    // Hallo Nico (Alter33)

    // es wird ausgegeben:
    // Nico33



  • @it851
    Hängt dein Programm vllt in der Eingabe fest? Du gibst Nico33 am Anfang aus und liest danach Namen und Alter ein.
    Für mich sieht das so aus, als sei die Eingabe noch nicht abgeschlossen und deswegen wird auch nichts weiter ausgegeben.

    PS:
    Wenn du std::string benutzt solltest du auch <string> inkludieren und dich nicht darauf verlassen, dass <string> durch <iostream> inkludiert wird.



  • Nico33
    Nico
    33
    HalloNico(Alter33)
    

    macht was es soll.

    Benutzt du Visual Studio? Schliesst sich das Fenster, bevor du die Ausgabe gesehen hast?



  • @IT851: Ich denke, da hast du etwas mißverstanden. Die Ausgabe "Nico33\n" wird nicht als Eingabe interpretiert, sondern das Programm erfragt die Eingabe (standardmäßig) über die Tastatur.

    Und es muß mindestens ein Leerzeichen dazwischen sein, also "Nico 33".

    Wenn du die Eingabe von außen deinem Programm mitteilen möchtest, dann geht das mittels Pipe bzw. Pipes and Redirection.

    PS: Hier mit einem Online-Compiler (inkl. Eingaben): Ideone-Code



  • @DocShoe:dachte wirklich,dass es durch <iostream>inkludiert wird.

    @manni66:ich nutze Xcode,das Fenster schliesst nicht

    @Th69:ich weiß,dass die Ausgabe "Nico33\n" genau so als Zeichenfolge ausgegeben wird.
    Was heißt genau"das Programm erfragt die Eingabe (standardmäßig) über die Tastatur"?
    Leerzeichen wegen whitespace,heißt damit die Ausgabe nicht komplett gelesen wird?

    Das heißt ich kann das Programm Xcode nicht als Speicherort nutzen (Eingabe)um es schließlich auszulesen und somit auszugeben?
    Die Funktionsweise mittels Pipe bzw. den Zusammenhang und Nutzung verstehe ich nicht ganz?



  • K.A., wie ich es dir anders erklären soll.
    Deine Ausgabe "Nico33\n" ist komplett sinnfrei. Es würde auch genauso funktionieren, wenn du es auskommentierst (so wie ich es bei dem Online-Compiler Code gemacht habe - hast du dir diesen mal angeschaut?).
    Ich kann mir auch nicht vorstellen, daß in dem Buch von Stroustrup dies nicht auch genau erklärt wird, also wie die Standardein- und -ausgabe funktioniert.

    Das Programm erwartet eine Eingabe (von der Tastatur) und mittels std::cin >> first_name wird ein String (Text) eingelesen, solange bis ein Whitespace (Leerzeichen, Tab, Zeilenumbruch etc.) kommt. Anschließend wird mit std::cin >> age versucht, noch eine Zahl einzulesen.
    Und ohne das Leerzeichen würde "Nico33" als first_name komplett eingelesen und dann bei age stehenbleiben (solange bis eine weitere Eingabe getätigt wird).

    Vllt. verstehst du es so besser:

    std::string first_name;
    int age;
    
    std::cout << "Bitte gib deinen Namen ein:\n";
    std::cin >> first_name;
    std::cout << "Und jetzt dein Alter:\n");
    std::cin >> age;
    
    std::cout << "Hallo " << first_name << " (Alter" << age << ")\n";
    


  • std::cout (Standard character output stream) und std::cin (standard character input stream) sind voneinander 100% unabhängig.

    Wenn du in der Konsole Zeichen eingibst, werden diese erstmal gepuffert, sodass Du z. B. noch Korrekturen machen kannst, bevor Du dann mit der Eingabe/Return Taste die eingegebenen Zeichen "abschickst". Dann landen die Zeichen in std::cin, und können von dort z. B. mit operator>> gelesen werden. Das Programm wartet bei einer Eingabe mit cin so lange, bis Du Zeichen eingibst, die gelesen werden können.

    Wenn du mit std::cout etwas ausgibst, landen die Zeichen zwar in der Konsole, aber sie sind nicht im Eingabe-Stream std::cin.

    Wenn du mit operator>> aus std::cin etwas ließt, dann werden standardmäßig nur Zeichen bis zum nächsten Whitespace (z. B: Leerzeichen, Tab oder Newline) betrachtet. Ein Beispiel:

    string vorname;
    string nachname;
    std::cin >> vorname >> nachname;
    // Auf der Tastatur wird eingegeben "Max Mueller" und dann Return gedrückt
    std::cout << "Hallo " << vorname << ' ' << nachname << '\n';
    // Ausgabe: "Hallo Max Mueller"
    

    Dein Programm gibt einfach "Nico33" aus, und wartet dann in der Zeile std::cin >> first_name; darauf, dass Du etwas in der Konsole eingibst.



  • @it851 sagte in Fehlersuche,Programm soll Name und Alter einlesen, nur wenige Zeilen:

    Das heißt ich kann das Programm Xcode nicht als Speicherort nutzen (Eingabe)um es schließlich auszulesen und somit auszugeben?

    Du redest vollkommen wirr.