Форум программистов, компьютерный форум CyberForum.ru

Лишнее считывание строк - C++

Восстановить пароль Регистрация
 
Nikoys
26 / 26 / 6
Регистрация: 29.12.2010
Сообщений: 90
11.06.2013, 20:45     Лишнее считывание строк #1
Всем доброго вечера!
Как всегда, избитая тема про потоки cin/cout.
Предположим, в следующем формате пишется часть кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    cout << "Enter the number of books:\n";
    cin >> k; // int k
    cout<<"Fill the library:\n";
    for(int i=0; i<k; i++)
    {
        string str1, str2;
        cout << "Enter the author:\t";
        getline(cin,str1);
        cout << "Enter the name of book:\t";
        getline(cin,str2);        
        element.insert(pair<string, string> (str1, str2)); // map<string,string> element
    }
getline был взят, чтобы не игнорировались пробелы cin'ом.

С другой стороны, в начале работы игнорируется первый getline.
То есть, после ввода числа книг вывод происходит в следующем формате:
"Enter the author: Enter the name of book:"
Далее все работает отлично, во всяком случае, строки записываются нормально.

Проверял, что выдает первой строкой после первого пробега. На выводе это пробел.
Как решить проблему? Связано ли это с предварительным считыванием числа и остатком пустого символа в потоке (хотя я пробовал делать cin.clear(), не помогло)? Как решить проблему без считывания числа как строки и без перевода в числа (ну, или так, если не выходит иначе)?

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 20:45     Лишнее считывание строк
Посмотрите здесь:

C++ считывание строк и чисел.
считывание строк из файла C++
Считывание строк в файл C++
C++ Считывание строк из файла
C++ Считывание из файла в char - при выводе выводится лишнее
Считывание строк из файла C++
C++ Считывание строк из файла
Считывание и сравнение строк C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
11.06.2013, 21:08     Лишнее считывание строк #2
после
C++
1
 cout<<"Fill the library:\n";
дописать
C++
1
cin.sync();
или
C++
1
cin.get();
Добавлено через 2 минуты
Просто там один символ не считался. Можно синхронизацией, а можно его считать.
Yandex
Объявления
11.06.2013, 21:08     Лишнее считывание строк
Ответ Создать тему
Опции темы

Текущее время: 17:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru