Почему игнорируется do while?

Всем доброго времени суток!
Почему в данном фрагменте кода игнорируется цикл do while?

#include <iostream>
#include <string>
#include <windows.h>
#include <fstream>
#include <vector>
using std::cin;
using std::endl;
using std::cout;
using std::string;


int menu()
{
    int c;
    cout << "Выберите операцию: " << endl;
    cout << "1 - начать работу" << endl;
    cout << "2 - добавить слова в файл" << endl;
    cin >> c;
    return c;
}

void FileIn()
{
    std::vector<string> a;
    cout << "Вводите слова, для завершения введи пустую строку!" << endl;
    string buffer = "";
    do {
        std::getline(cin, buffer);
        if (buffer.size() > 0) 
        {
           a.push_back(buffer);
        }
    } while (buffer != "");
    std::ofstream in("eng.txt", std::ios_base::app);
    for (unsigned int i = 0; i < a.size(); i++) 
       in << a[i] << endl; 
    in.close();
}

int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n = menu();
    switch(n)
    {
    case 2:
        FileIn();
        break;
    }

}

За любую помощь заранее спасибо!

int menu()
{
    int c;
    cout << "Выберите операцию: " << endl;
    cout << "1 - начать работу" << endl;
    cout << "2 - добавить слова в файл" << endl;
    cin >> c;
    return c;
}

При вводе значения в переменную с в поток попадает не обработанный символ '\n' сгенерированный нажатием клавиши <Enter>.

void FileIn()
{
    std::vector<string> a;
    cout << "Вводите слова, для завершения введи пустую строку!" << endl;
    string buffer = "";
    do {
        std::getline(cin, buffer);
        if (buffer.size() > 0) 
        {
           a.push_back(buffer);
        }
    } while (buffer != "");
    std::ofstream in("eng.txt", std::ios_base::app);
    for (unsigned int i = 0; i < a.size(); i++) 
       in << a[i] << endl; 
    in.close();
}

Потом символ новой строки считывается функцией getline();(про функцию можно почитать здесь),что автоматом завершает ввод, не пройдя по условию buffer.size() > 0.

Что нужно сделать? В функции int menu() ввод в переменную c сделать так

(cin >> c).get();

чтобы метод get() считал символ новой строки после нажатия клавиши <Enter>.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.