C ++ игнорировать и очищать буфер

0
    int position;
    afile.open("EmployeeInfo.dat", ios::in | ios::binary);   

    char name[80];
    cout << "\nEdit Employee Info" << endl;
    cout << "---------------------" << endl;
    cout << "New Employee Username: ";
        cin.clear();
        cin.ignore(100, '\n');
        cin.getline(name, 80);
    bool flag = true;

Привет всем, это фрагмент кода моей программы, который я сейчас делаю. большая часть функциональности прекрасна, за исключением того, что мне нужно дважды нажать Enter, чтобы получить данные getline. может ли кто-нибудь указать мне, где я делаю неправильно?

последний вход до этого представляет собой целочисленный ввод с использованием выбора cin >>; входя в коммутатор. У меня нет никаких ошибок с другими функциями, даже если они делают то же самое. буквально точным.

например. нет ошибок со следующими

afile.open("EmployeeInfo.dat", ios::in | ios::binary);   

char name[80];
cout << "\nAdd Employee Info" << endl;
cout << "---------------------" << endl;
cout << "New Employee Username: ";
    cin.clear();
    cin.ignore(100, '\n');
cin.getline(name, 80);

Хорошо, здесь окружающие коды.

функция вызывается в другой функции

    cout << "Your Choice: ";
    cin >> choice;

    switch(choice)
    {
        case 1: cout << "Create Holiday Package" << endl;
        break;
        case 2: cout << "Delete Holiday Package" << endl;
        break;
        case 3: cout << "Edit Holiday Package" << endl;
        break;
        case 4: addEmployee(afile, num, e);
        break;
        case 5: delEmployee(afile, num, e);
        break;
        case 6: editEmployee(afile, num, e);
        break; ....// to be continue case
  }//end case

и это взаимодействие у меня с cmd

Добро пожаловать на экран входа в систему

Пожалуйста, введите имя пользователя: Daniel Roberts

Пожалуйста, введите пароль: Daniel1234

Авторизация успешна

Меню главного менеджера

1) Создать праздничный пакет

2) Удалить праздничный пакет

3) Редактировать праздничный пакет

4) Создайте учетную запись

5) Удаление учетной записи персонала

6) Изменить учетную запись

7) Посмотреть статистику Booking Packages

8) Выход

Ваш выбор: 6

Изменить информацию о сотрудниках


Новый пользователь Имя пользователя: John Smith

<- странное пространство здесь, что мне нужно нажать enter, чтобы избавиться от

Введите новое имя:

  • 0
    Я думаю, что вам нужно показать немного больше окружающего кода, а также показать фактический ввод / вывод и ожидаемый ввод / вывод (т.е. показать сеанс в том виде, как он есть с вашим текущим кодом, и как он должен выглядеть).
  • 0
    Можете ли вы дать нам копию вашей программы в одном блоке кода, пожалуйста? Это помогает нам увидеть, что происходит до / после другого.
Теги:
iostream

1 ответ

1

Проблема заключается в cin.ignore(), он будет читать до тех пор, пока не будет прочитано 100 символов, или один из этих символов будет символом новой строки. Поэтому, чтобы удовлетворить его, вы должны ввести, например, новую строку.

  • 0
    хм, я понимаю, что вы имеете в виду, но когда я набираю cin.getline, разве это уже не удовлетворяет функции \ n? например, мой ввод - cin.getline (name, 80) <- для этой части я набрал имя A enter, я попытался удалить функцию игнорирования, и кажется, что вход, который задерживается в буфере, есть, таким образом пропуская мою функцию getline.
  • 0
    @ user3245403 Когда вы ignore а затем getline вы делаете две операции ввода. Оба закончились переводом строки.
Показать ещё 1 комментарий

Ещё вопросы

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