Warum gibt mit cin nur einen Bruchteil der Eingabe zurück?



  • Hallo,

    ich möchte mit cin ein Kommando einlesen. Dieses Kommando besteht aus einem Befehl mit verschiedenen Parametern, die durch ein Leerzeichen voneinander getrennt sind. (z.B.: list A Z) Wenn dieses Kommando per cin einlese, erhalte ich nur den Teil bis zum ersten Leerzeichen. Wie komme ich an die anderen Teile?

    Vielen Dank!



  • Steff schrieb:

    Hallo,

    ich möchte mit cin ein Kommando einlesen. Dieses Kommando besteht aus einem Befehl mit verschiedenen Parametern, die durch ein Leerzeichen voneinander getrennt sind. (z.B.: list A Z) Wenn dieses Kommando per cin einlese, erhalte ich nur den Teil bis zum ersten Leerzeichen. Wie komme ich an die anderen Teile?

    Vielen Dank!

    Um auch Leerzeichen mit einlesen zu können mit getline, oder cin.getline

    std::string variable;
    getline(cin,variable);
    //oder
    cin.getline(variable,255); // 255->Anzahl zeichen die eingelesen werden sollen
    

    Code-Hacker



  • Vielen herzlichen Dank!

    Leider funktioniert das bei mir igendwie nicht. Ich muss cin.getline drei Argumente übergeben, warum?



  • Steff schrieb:

    Vielen herzlichen Dank!

    Leider funktioniert das bei mir igendwie nicht. Ich muss cin.getline drei Argumente übergeben, warum?

    Also ich weiß nicht woran es liegt (Header?), das du die mit nur 2 Parametern nicht hast. Der dritte Parameter erwartet eine Endekennung. Es wird solange eingesen bis die 255 voll sind oder bis das Endekennungszeichen, welches du da als dritten Paramter übergeben hast im Datenstrom auftaucht:

    cin.getline(variable,255,';'); //Liest bis ein ; im Datenstrom auftaucht oder 255 Zeichen gelesen sind
    

    Ich bevorzuge mittlerweise

    getline(cin,variable[,<endekennung>]);
    

    Die angabe in den eckigen Klammern heißt optional, hier kannst du nämlich auch eine Endekennung festlegen.

    Code-Hacker



  • Hallo,

    ich habs rausbekommen:

    Ich habe als erstes Argument ein string-Objekt übergeben. Mit einem Char-Array hat es dann auch mit 2 Parametern funktioniert.

    Ich hätte da noch eine kleine Zusatzfrage:
    Wie bereits gesagt, möchte ich ein Kommando einlesen. Das Kommando wird in einer Endlos-Schleife eingelesen: Einlesen->Ausführen->"Horchen". Nachdem ein Kommando eingelesen wurde, möchte ich die darin vorkommenden Leerzeichen zählen, um die einzelnen Parameter anschließend zerteilen zu können. Komischerweise erhalte ich beim ersten durchgang immer ein falsche Anzahl (immer +3) und erst in allen weiteren Durchläufen ist die Anzahl an Leerzeichen korrekt. An was könnte das liegen? Ist das Char-Array irgendwie vorinitialisiert?

    int counter = 0;	
    char command[255];
    cin.getline(command, 255);
    
    for(int a=0; a<255; a++) {
    
       if(command[a] == ' ')
       counter = counter + 1;
    }
    


  • Benutze std::getline dann funktionert es auch für 2 Parameter mit einer "echten" string-variablen:

    std::getline(std::cin,help);
    

    Solltest dir mal die Überladungen ansehen, wenn du std::getline( eingibst öffnet sich ein kleines Fenster wo die Überladungen drinstehen (zumindest bei VS und Borland).

    Wenn du ein Parameterabhängiges Program schreibst würde ich dir sowieso empfehlen die Parameter an main zu übergeben:

    int main(int argc, char* argv[]){...}
    

    Code-Hacker


Anmelden zum Antworten