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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
#1

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

07.08.2013, 13:06. Просмотров 646. Ответов 8
Метки нет (Все метки)

У меня есть класс, в котором в функции 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 ;
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2013, 13:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает getline() (C++):

Не работает getline(); - C++
Всем доброго дня:) Не работает кусочек кода: class Employee { private: string name;

не работает getline - C++
Есть код (писал не я), но не могу понять, почему getline() игнорируется в строке 72. Сначала не работало в функции класса, потом решил...

Не работает getline! - C++
Почему-то, когда ввожу строку с помощью cin.getline, всё равно строка записывается до первого пробела :( #include &lt;conio.h&gt;; #include...

Не работает getline() - C++
Здравствуйте, есть такой код: bool Library::AddNewBook() { bool repeat = true; char answer; std::regex author(AuthorExp); ...

Не работает getline - C++
Есть прога, которая считает предложения и выводит самое длинное.Есть главный кейс с меню. В первом пункте кейса есть гетлайн, но при выборе...

не работает getline - C++
Привет всем! непонимаю почему не работает getline. вот код #include &lt;training.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using...

8
Belfegor
Ghost
173 / 173 / 6
Регистрация: 16.09.2012
Сообщений: 526
07.08.2013, 13:09 #2
C++
1
std::getline(std::cin, NewString);
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
07.08.2013, 13:10 #3
C++
1
(cin >> position).get();
1
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
07.08.2013, 16:04  [ТС] #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] ;
        }
    }
0
sergeyborod2000
Сообщений: n/a
07.08.2013, 16:17 #5
везде getline пользуешь в проекте?
mikhail90
0 / 0 / 0
Регистрация: 21.03.2013
Сообщений: 76
07.08.2013, 16:19  [ТС] #6
аха
0
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
07.08.2013, 16:29 #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;
}
1
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
07.08.2013, 16:30 #8
mikhail90, какое отношение последний код имеет к проблеме?

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

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

Не работает getline() - C++
Это часть из моего курсового, почему-то когда я запрашиваю заполнение структуры, то на то, что заполняется гетлайном программа просто...

не работает getline - C++
Подскажите, пожалуйста, почему не работает getline? Нужно ввести порядковый номер служащего и его имя с фамилией, но getline пропускает...

Не работает getline() в классе - C++
Почему-то, если поставить char name; ... cin&gt;&gt;name;, то имя вводится, а если использовать string name; ... getline(cin, name); то операция...

Не работает функция getline(); - C++
Помогите, после ввода в переменную int c не выполняется функция getline, программа ее просто пропускает. #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru