Beste Antwort
Hier werden Sie mit Cin
Verwenden von , cin.get , cin.getline und cin. ignorieren
Verwenden des Operators >> (mit cin)
The> Der Operator> kann verwendet werden, wenn Sie einfach die nächsten vom Benutzer eingegebenen Zeichen ohne Leerzeichen in ein Zeichen oder Zeichenarray einlesen möchten. Alle druckbaren Zeichen, die auf das erste Leerzeichen folgen, werden ignoriert und nicht in der Variablen gespeichert Verwenden Sie eine Anweisung wie
cin >> UserExplanation;
, wenn Sie dies beispielsweise wünschen um einen ganzen Satz vom Benutzer zu erhalten, der Leerzeichen enthält. In diesem Fall sollten Sie die cin-Member-Funktionen get oder getline verwenden
Frage : Wird am Ende des Zeichenarrays, UserExplanation, automatisch ein Nullterminator gespeichert?
Verwenden von cin.get
Die unformatierte Funktion get member funktioniert mit zwei Ausnahmen wie der Operator >>. Erstens enthält die Funktion get Leerzeichen , während der Extraktor Leerzeichen ausschließt, wenn das Flag ios :: skipws gesetzt ist (Standardeinstellung). Zweitens ist es weniger wahrscheinlich, dass die get-Funktion dazu führt, dass ein gebundener Ausgabestream (z. B. cout) gelöscht wird.
Eine Variation der get-Funktion gibt eine Pufferadresse und die maximale Anzahl der zu lesenden Zeichen an. Dies ist nützlich, um die Anzahl der an eine bestimmte Variable gesendeten Zeichen zu begrenzen, wie dieses Beispiel zeigt:
#include
void main()
{
char line[25];
cout << " Type a line terminated by carriage return\n>";
cin.get( line, 25 );
cout << " " << line;
}
In diesem Beispiel können Sie bis zu 24 Zeichen und ein Abschlusszeichen eingeben. Alle verbleibenden Zeichen können später extrahiert werden.
Verwenden von cin.getline
Die Funktion getline member ähnelt der Funktion Funktion erhalten. Beide Funktionen erlauben ein drittes Argument, das das Abschlusszeichen für die Eingabe angibt. Der Standardwert ist das Zeilenumbruchzeichen. Beide Funktionen reservieren ein Zeichen für das erforderliche Abschlusszeichen . get lässt jedoch das Abschlusszeichen im Stream und getline entfernt das Abschlusszeichen.
Das folgende Beispiel gibt ein Abschlusszeichen für die Eingabe an Stream:
#include
void main()
{
char line[100];
cout << " Type a line terminated by "t"" << endl;
cin.getline( line, 100, "t" );
cout << line;
}
Verwenden von cin.ignore
cin.ignore (int nCount = 1, int delim = EOF);
Parameter
nCount - Die maximale Anzahl der zu extrahierenden Zeichen. delim - Das Trennzeichen (standardmäßig EOF).
Anmerkungen
Extrahiert und verwirft bis zu nCount-Zeichen. Die Extraktion wird gestoppt, wenn das Trennzeichen-Trennzeichen extrahiert oder das Dateiende erreicht ist. Wenn delim = EOF (Standardeinstellung), wird nur die Bedingung für das Dateiende beendet. Das Trennzeichen wird extrahiert.
Antwort
cin.ignore () ist eine vordefinierte Funktion, die ein oder mehrere Zeichen aus dem Eingabepuffer ignoriert / löscht.
Voraussetzungen: 1. Das cin behandelt einen Leerraum, dh " ", " \ t ", " \ n " als Trennzeichen.
2. Wenn Sie hier etwas vom Standardeingabegerät (Tastatur) lesen, wird es zuerst in den -Eingabepuffer verschoben. Der Eingabepuffer ist ein Speicherort, an dem alle eingehenden Informationen gespeichert sind fährt zur Verarbeitung mit der CPU fort.
Das Problem: 1. Angenommen, Sie möchten eine "Zeichenfolge" vom Benutzer lesen. char myname [10];
2. Sie verwenden am Ende irgendwie cin anstelle von cin.getline () cin >> myname;
3. Ich tippe "ABC" und drücke dann die Eingabetaste. Es nimmt ABC auf und behandelt das folgende "\ n" als Delimeter.Infolgedessen wird "\ n" nicht gelesen und verbleibt im -Eingabepuffer.
4. Hier ignoriert cin.ignore () diese ungelesenen Zeichen, die im Eingabepuffer verblieben sind.
Die Lösung: Wenn Sie möchten Vermeiden Sie Situationen. Denken Sie nur daran, , cin nicht zur Eingabe von Zeichenfolgen zu verwenden. und tada, Problem gelöst !!