2017-01-31 6 views
-4

Ich habe cin.getline nach cin.ignore() verwendet, aber ich bekomme eine Fehlermeldung, die nicht zugewiesen int ... Nicht sicher, was zu tun ist oder was falsch ist. Irgendwelche Vorschläge?So verwenden Sie Zeichenfolge mit Phrasen, die Leerzeichen enthalten

Hier ist mein Code:

#include <iostream> 
#include <string> 
#include <cstring> 

using namespace std; 


int main() 
{ 
    string phras; 
    cout << " Provide a phrase, up to 30 characters with spaces > " << endl; 
    cin.ignore(); 
    cin.getline(phras, sizeof(phras)); 
    cout << " The phrase is: " << phras << endl; 
    cout << endl; 


    return 0; 
} 

UPDATE Ich änderte cin.getline (phras, sizeof (phras)); to getline (cin, phras) Problem gelöst! Danke für die Hilfe alle!

+2

Warum haben Sie Code in die Frage eingefügt, die Sie nicht kommentieren sollen? Wenn es nicht relevant ist, lassen Sie es aus. – Barmar

+0

Die '>>' Operation, um das einzelne Zeichen zu erfassen, wird ein neues Zeilenzeichen im cin Puffer hinterlassen. Sie können 'cin.ignore()' verwenden, um es zu entfernen. –

+0

@paulRooney Also sollte ich das vor dem cin >> schreiben oder nachher schreiben? Entschuldigung für die Klärungsfrage. Ich möchte nur sicherstellen, dass ich das richtig mache! Danke dir übrigens. –

Antwort

0

Das Problem ist, dass

char letter[1]; 

nicht groß genug ist. Wenn eine C-Zeichenfolge bis zu N Zeichen enthalten soll, muss es char letter[N+1] deklariert werden, um Platz für das Nullabschlusszeichen zu ermöglichen. Also, wenn der Benutzer ein einzelnes Zeichen geben wird, es sein muss:

char letter[2]; 

Als Ergebnis, werden Sie nicht definiertes Verhalten bekommen, wenn cin >> letter schreibt 2-Zeichen in das Array, das nur Platz hat für 1.

und falls der Benutzer berechtigt ist, ein 10-Buchstaben-Wort zu geben, sollte es sein:

char word[11]; 

und es sollte sein:

char phrase[31]; 
+0

Die erste soll nur EINEN Buchstaben enthalten ... Wenn Sie die Anweisung lesen, die besagt, dass ein Zeichen eingegeben werden soll. –

+1

@KatieStevers sieht der Compiler immer noch 'char letter [1];' as ein Array-Typ. Vielleicht beabsichtigten Sie 'Char Brief;'. –

+0

@KatieStevers Da es sich um eine C-Zeichenfolge handelt, benötigen Sie immer noch 2 Elemente für einen Buchstaben. Eine für den Buchstaben, eine für den Null-Terminator. – Barmar

Verwandte Themen