Почему проскакивает строка ввода FIO? [дубликат]

365
23 мая 2017, 04:09

На данный вопрос уже ответили:

  • Некорректное чтение строки из std::cin после чтения числового значения 3 ответа
class Employee {
public:
    Employee() {};
    ~Employee() {};
    void Add_data(); // добавить данные
    void Show_data(); // просмотреть данные
    void Delete_data(); // удалить данные
    //переменные для персонала
    char name_employee; // ограничение до 100 символов
    float employe_id; // табельный номер
    float ExpEmployee; // стаж
    float PriceOfHour; // Зарплата за час
    float HoursEmployee; // кол-во часов работы
    float GetTotalSalary(float hoursalary, float hours) const { return (hoursalary * hours); }; // результат зарплаты
    float GetBonus(float exp, float hoursalary) const; // прибавка
};
// Метод класса, который выполняет роль добавление данных в файл
void Employee::Add_data() {
    // временные перменные
    int ans(0);
    char name_employee[30];
    float employeid(0), exp(0), hourprise(0), hours(0);
    // Работа с файлом
    do
    {
        cout << "To keep previous record?\n1 - Yes\n2 - No\n";
        cin >> ans;
    } while (!ans == 1 || !ans == 2);
    /* создать объект для записи
       и автоматически переставляет указатель текущего символа потока в конец.
    */
    ofstream fout("db_employee.txt", ios_base::app);
    if (ans==2)
        // уекаем поток после открытия
        // и открывает файл для записи.
        ofstream fout("db_employee.txt", ios_base::trunc | ios_base::out);
    // Работа с данныеми об сотруднике
    cout << "Enter employee FIO: ";
    cin.sync(); //очистка буфера
    fgets(name_employee, sizeof(name_employee), stdin); //// считать строку из стандартного потока ввода
    fout << "\nFIO: " << name_employee << endl; //запись в файл
    cout << "\nEnter Eployee id: ";
    cin >> employeid;
    fout << "Eployee id: " << employeid << endl;
    cout << "\nEnter employee experience (in hours): ";
    cin >> exp;
    fout << "Experience (in hours): " << exp << endl;
    cout << "\nEnter employee salary per hour: ";
    cin >> hourprise;
    fout << "Salary per hour: " << hourprise << endl;
    fout << "Resulting salary: " << Employee::GetTotalSalary(hourprise, exp) << endl;
    fout << "Bonus: " << Employee::GetBonus(exp, hourprise) << endl << endl;
    fout.close();
}

Программирую на Vicual Studio 2015 C++. Всё работает корректно, кроме ввода FIO. Пожалуйста помогите ))

Answer 1

Стандартный вопрос...

Все, как обычно - после считывания cin >> ans в буфере остается '\n'...

Вам после этого

} while (!ans == 1 || !ans == 2);

просто нужно игнорировать все символы до символа новой строки -

cin.ignore(numeric_limits<streamsize>::max(), '\n');
READ ALSO
OpenSll MD2 разные данные

OpenSll MD2 разные данные

Использую MD2 хеш-функциюНе могу понять почему при одинаковых строках результат разный

308
Как разобраться с кодировкой в QT?

Как разобраться с кодировкой в QT?

ЗдравствуйтеИмеется проблема с кодировкой в QT Creator

406
Собрать header only dll с помощью cmake

Собрать header only dll с помощью cmake

Хочу собрать dll с помощью cmakeИспользую следующий код:

254
Непонятная формула и её результат

Непонятная формула и её результат

есть задача найти значение функции

264