Wenn ich versuche, von dem Benutzer einen Benutzernamen zu bekommen, ich folgendes machen:Cin arbeitet nicht mit Array von Zeichen
#include <iostream>
using namespace std;
void main(){
char *usrn=new char[20]; //Max username length of 20 alfanumeric characters
std::string usrn_str;
while (true){
std::cout << "Enter the username(3-20 characters): ";
cin.clear();
cin.ignore();
std::cin.getline(usrn,22);
usrn_str=usrn;
if ((usrn_str.length())<3){
cout << "Introduced username too short!" << endl;
}
else if ((usrn_str.length())>=21){
cout << "Introduced username too long!" << endl;
}
else {
cout << usrn_str.c_str() ;
}
}
}
Wie auch immer, wenn eine größere Benutzernamen als die erlaubte ein, dh 25 einzuführen, zeigt es mir die Nachricht, dass der eingeblendete Benutzername zu lang ist, aber in der nächsten Schleife kann ich den Benutzernamen nicht mehr eingeben, weil es dauert, da ich die letzten 5 Zeichen im genannten Beispiel eingegeben habe. Zusammenfassend, wenn ich einen Benutzernamen mit einer Länge von 30 eintrage, verwirft er die ersten 20 und setzt die letzten 10 als Benutzernamen, wenn ich den Benutzernamen fragen möchte, bis ich einen Benutzernamen mit einer Länge von 3-20 bekomme.
Wie könnte ich es implementieren? Jede Hilfe wird geschätzt.
Versuchen 'std :: cin.ignore (256, '\ n')' – ArchbishopOfBanterbury
Verwenden Sie einen [ 'std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string), lese den gesamten Benutzernamen ein und überprüfe dann die Größe. Wenn es zu groß ist, wiederhole es. – NathanOliver
Warum verwenden Sie diesen Zeiger überhaupt zum char? Benutze 'std :: string' und alles wird gut. – ForceBru