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

Не работает getline() - C++

Восстановить пароль Регистрация
 
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
07.08.2013, 13:06     Не работает getline() #1
У меня есть класс, в котором в функции printPaste считывается строка пользователем. При вызове этой функции после ввода переменной position компилятор игнорирует
C++
1
2
getline(cin, NewString); 
UserStr.insert (position, NewString) ;
и сразу начинает выводить строку.

Если это заменить оператором,
C++
1
cin >> NewString ;
то строка считывается, но без пробелов, а мне нужно с пробелами. Объясните в чем дело ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class MyClassString
{
private:
    string NewString ; 
    int LengthString ;
public:
    void printRevers (string &UserStr)  // реверс
    {
        LengthString = UserStr.length() ;
        for (int i = 0; i < LengthString / 2 ; ++i)
            swap( UserStr[i], UserStr[LengthString-1-i] );
        cout << endl << "Строка после реверса: " << endl <<UserStr << endl ;
    }
    void printPaste (string &UserStr)  // вставка в произвольную позицию
    {
        int position ;
        cout << "Введите позицию, куда вы будете вставлять свою строку" << endl
            << "(отчет позиций введется с 0): " ;
        cin >> position ;
        cout << "Введите вставляемое: " ;
        getline(cin, NewString); // ЭТО НЕ РАБОТАЕТ
        UserStr.insert (position, NewString) ;
        cout << endl << UserStr << endl ;
    }
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 13:06     Не работает getline()
Посмотрите здесь:

не работает getline C++
Не работает getline(); C++
не работает getline C++
C++ Не работает getline()
Не работает getline() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
07.08.2013, 13:09     Не работает getline() #2
C++
1
std::getline(std::cin, NewString);
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2013, 13:10     Не работает getline() #3
C++
1
(cin >> position).get();
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
07.08.2013, 16:04  [ТС]     Не работает getline() #4
Опять та же проблема с getline. Пробовал применить фишку из последней подсказки, не помогло. Симптомы те же: Не считывает строку Подскажите, как это исправить ? И почему такое возникает ?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void printPartition (string &UserStr)  //  разбиение строки на набор подстрок по заданному разделителю 
    {
        string separator ;
        cout << "Введите разделитель из 1-ого символа:" ;
        getline(cin, separator) ;
        LengthString = UserStr.length() ;
        cout << endl << "Разбиение строки по заданному разделителю: " << endl ;
        for (int k = 0 ; k < LengthString ; k++)
        {
            if (UserStr[k] == separator[0])
                UserStr[k] = '\n' ;
            cout << UserStr[k] ;
        }
    }
sergeyborod2000
Сообщений: n/a
07.08.2013, 16:17     Не работает getline() #5
везде getline пользуешь в проекте?
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
07.08.2013, 16:19  [ТС]     Не работает getline() #6
аха
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
07.08.2013, 16:29     Не работает getline() #7
если перед getline использовать cin, то нужно после него прописать cin.ignore()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
#include<string>
using namespace std;
 
 
class MyClassString
{
private:
    string NewString ; 
    int LengthString ;
public:
    void printRevers (string &UserStr)  // реверс
    {
        LengthString = UserStr.length() ;
        for (int i = 0; i < LengthString / 2 ; ++i)
            swap( UserStr[i], UserStr[LengthString-1-i] );
        cout << endl << "Строка после реверса: " << endl <<UserStr << endl ;
    }
    void printPaste (string &UserStr)  // вставка в произвольную позицию
    {
        int position ;
        string n;
        cout << "Введите позицию, куда вы будете вставлять свою строку" << endl
            << "(отчет позиций введется с 0): " ;
        cin >> position ;
        cout << "Введите вставляемое: " <<endl;
        cin.ignore();
         getline(cin,n);
        UserStr.insert (position, n) ;
        cout << endl << UserStr << endl ;
    }
};
int main()
{
    setlocale(LC_CTYPE,"rus");
    MyClassString m;
    string s="fgghhjjj kkkk";
    m.printPaste(s);
    system("pause");
    return 0;
}
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
07.08.2013, 16:30     Не работает getline() #8
mikhail90, какое отношение последний код имеет к проблеме?

После считывания в int position в потоке остается символ '\n'. Перед вводом строки, его нужно удалить. Как вам уже подсказали, такой код работает:

C++
1
2
3
4
int position;
string str;
(cin >> x).get();
getline(cin, str);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2013, 17:18     Не работает getline()
Еще ссылки по теме:

не работает getline C++
C++ Не работает getline
C++ Не работает getline в VS2012

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

Или воспользуйтесь поиском по форуму:
int main
4 / 4 / 0
Регистрация: 15.06.2013
Сообщений: 60
10.08.2013, 17:18     Не работает getline() #9
cin.getline()
Yandex
Объявления
10.08.2013, 17:18     Не работает getline()
Ответ Создать тему
Опции темы

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