welche variante ist besser?



  • hej,
    jeg lerne gerade c++.

    nun habe ich zwei varianten für

    - texteingabe und anschließend wieder ausgeben

    kennegelernt.

    Einmal

    [cpp]char myname[21];

    cout << "Bitte gebe deinen Namen ein:" <<endl;
    cin >> myname;
    cout << "Dein Name ist: "<<myname;[/cpp]

    ODER

    char myname[21];
    
    cout << "Bitte gebe deinen Namen ein:" <<endl;
    cin.getline(myname, 80);
    cout << "Dein Name ist: "<<myname;
    

    Mir fällt das erster leichter zu merken aber wo ist der Unterschied?
    WANN wende ich welche Variante an?



  • schuberti schrieb:

    Mir fällt das erster leichter zu merken aber wo ist der Unterschied?

    Die 2. Variante liest eine Zeile ein, die 1. nur ein Wort.

    WANN wende ich welche Variante an?

    Am besten keine von beiden. Schonmal überlegt, was passiert, wenn der Benutzer mehr als 20 Zeichen eingibt?
    Richtig geht das übrigens so:

    #include <string>
    
    std::string myname;
    std::cin >> myname;
    std::cout << myname;
    // oder
    std::string myname;
    std::getline(std::cin, myname);
    std::cout << myname;
    


  • schuberti schrieb:

    WANN wende ich welche Variante an?

    Gar nicht.

    std::string blah;
    std::cin >> blah;       // liest nur ein Wort
    getline(std::cin,blah); // liest eine ganze Zeile
    

    Gruß,
    SP


  • Administrator

    schuberti schrieb:

    ... aber wo ist der Unterschied?

    Die erste Variante liest nur ein Wort ein, einfach bis zum nächsten Whitespace, während die zweite Variante die ganze Zeile liest oder bis 80 Zeichen gelesen wurden.

    schuberti schrieb:

    WANN wende ich welche Variante an?

    Mit dem Unterschied sollte dies wohl nun klar sein. Allerdings hat deine zweite Variante noch undefiniertes Verhalten, weil du einen kleineren Buffer als 80 Zeichen übergibst.

    Grundsätzlich würde ich allerdings von beiden Variante abraten und eher volles C++ zu nehmen und daher auch std::string .

    #include <string>
    #include <iostream>
    
    int main()
    {
      std::string line;
      std::geline(std::cin, line); // Ganze Zeile lesen, egal wieviele Zeichen es sind.
    
      std::string word;
      std::cin >> word; // Ein Wort lesen.
    
      return 0;
    }
    

    Grüssli



  • Dravere schrieb:

    #include <string>
    #include <iostream>
    
    int main()
    {
      std::string line;
      std::geline(std::cin, line); // Ganze Zeile lesen, egal wieviele Zeichen es sind.
    
      std::string word;
      std::cin >> word; // Ein Wort lesen.
    
      return 0;
    }
    

    Grüssli

    Schließe mich an. Bei getline fehlt noch ein t.


Anmelden zum Antworten