Я хочу извлечь 6 символов (включая "\n") из ввода в массив и убедиться, что вход правильный, получив новый символ линии в определенном месте в массиве. Это то, что я сделал, но я не могу исправить это. Если пользователь вводит более 5 символов, цикл повторяется, но остальные символы все еще находятся в потоке. С cin.ignore('\n') я получаю бесконечный цикл без символа в потоке.
do
{
cout << "Please log in: \n";
cin.get(username, 6);
cin.ignore('\n');
if (username[5] != '\n')
cout << "\nYour username should be 5 digits!\n\n";
} while (username[5] != '\n');
Если вы действительно не хотите выполнять запись по символу, подумайте о том, чтобы использовать строку, а затем убедитесь, что ваш ввод действителен. Это упростит код и упростит его поддержку:
string username;
if (cin >> username) {
if (username.length() != 5) {
// report bad input
}
}
То, что вы пытаетесь сделать, может быть сделано гораздо проще с помощью строк, это просто так:
string username = "";
do
{
cout << "Please log in: \n";
cin>>username ;
if (username.length() != 5)
cout << "\nYour username should be 5 digits!\n\n";
} while (username.length() != 5);
но не забудьте добавить #include<string>
в свой код.