Извлеките определенное количество символов с помощью cin.get и убедитесь, что это правильно

0

Я хочу извлечь 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');
  • 0
    Я не понимаю, вы хотите получить 6 символов, включая "\ n", но вы используете cin.ignore ('\ n') ??
  • 1
    Если вы используете C ++, почему бы не использовать std :: string вместо char []?
Теги:
arrays
ignore
getline

2 ответа

2

Если вы действительно не хотите выполнять запись по символу, подумайте о том, чтобы использовать строку, а затем убедитесь, что ваш ввод действителен. Это упростит код и упростит его поддержку:

string username;

if (cin >> username) {
    if (username.length() != 5) {
        // report bad input
    }
}
1

То, что вы пытаетесь сделать, может быть сделано гораздо проще с помощью строк, это просто так:

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> в свой код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню