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

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

Войти
Регистрация
Восстановить пароль
 
Nike0
6 / 6 / 0
Регистрация: 29.11.2009
Сообщений: 55
#1

Строки (игнорирует getline) - C++

10.11.2010, 11:12. Просмотров 631. Ответов 5
Метки нет (Все метки)

Доброго времени суток. Столкнулся с такой проблемой: для ввода строки использую в двух случаях getline, а в одном простой cin. Прога состоит из 4 процедур, 3 выполняют задание, 4-я головная. Так вот. При выборе 1 или 3 задания у меня появляется "введите строку" и сразу же рез-т, т.е. мне не дает ввести строку (не знаю из-за чего, но если эту процедуру в отдельную прогу пихнуть, все ок). С cin такого нет все работает нормально. Делал в RAD Studio (Code Gear) 2009. Вот код:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#pragma hdrstop
#include <tchar.h>
#include <algorithm>
#include <iterator>
#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#pragma argsused
 
using namespace std;
 
bool compare(const string &a, const string &b)
{
    return a.length()<b.length();
}
 
void q()
{
    int kol = 0;
    cout<<"Vvedite stroky: ";
    string s;
    getline(cin,s);  //здесь игнорирует эту строку, переходит на следующий cout
    //дополним строку остальными гласными
    string glasnye("eyuioa");
    //инициализируем поток ввода из которого будем извлекать слова
    istringstream iss(s);
    cout<<"Slova, zakanchivayuschiesya na glasnuyu bukvu:"<<endl;
    while (iss>>s)
        if (string::npos != glasnye.find(*s.rbegin())) //poslednyaya bukva ne glasnaya?
            {
                cout << s << " ";
                kol++;
            }
    cout<<endl<<"Koli4estvo slov, zakan4ivayuschihsya na glasnyu bukvu: "<<' '<<kol<<endl;
}
 
void w()
{
    cout<<"Vvedite stroky: ";
    string g;
    vector<string>a;
    while (cin>>g && g!="sort") //тут все хорошо записывается, никаких проблем
        {
            a.push_back(g);
        }
    sort(a.begin(),a.end(),compare);
    copy(a.begin(),a.end(),ostream_iterator<string>(cout<<"Sortirovka  "," "));
}
 
void e()
{
    string buf;
    cout << "Vvedite stroku: "<<endl;
    getline(cin, buf);  //здесь то же самое, игнор
    istringstream ist(buf);
    ostringstream ost;
    while ( ist >> buf )
        if ( buf.find('t') == string::npos )
            ost << buf << ' ';
    cout << endl << "Result: " << ost.str() << endl;
}
 
int main()
{
    int b;
    cout<<"Vyberite zadanie: "<<endl<<"1 - Koli4estvo slov, zakan4ivayuschihsya na glasnyu bukvu. \n2 - Sortirovat stroku po vozrastaniyu. \n3 - Isklyuchit iz stroki bukvu t, ostavshiisya tekst vyvesti na ekran. \n0 - Exit."<<endl;
    cin>>b;
    switch (b)
    {
    case 1:{q(); break;}
    case 2:{w(); break;}
    case 3:{e(); break;}
    case 0:{return 0;}
        default: cout<<"Vy vveli nevernye dannye!";
    }
    getch();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2010, 11:12     Строки (игнорирует getline)
Посмотрите здесь:

Игнорирует строку с getline - C++
Помогите советом что не правильно, почему не работает ) при создании 1-й записи все проходит нормально, при попытке добавить вторую и...

Считывание строки getline - C++
#include &lt;string&gt; #include &lt;iostream&gt; using namespace std; void main() { int wtf; string a; string b;

Std::getline и длинные строки - C++
Если ввести большую строку с паролем то программа все время выводит Enter password и зависает. Как можно это исправить? #include...

Функция getline пропускает ввод строки - C++
Строка с getline(cin, pc.name); пропускает ввод. Пишу getline(cin, pc.name); так, как нужно ввести строку с пробелами. Подскажите ,что...

Функция getline(s), вычисляющая длину входной строки s - C++
1. Функция getline(s), вычисляющая длину входной строки s.

Как заполнить циклично строки через getline? - C++
Добрый день. Подскажите пожалуйста,почему в следующей ситуации: for(int i=0;i&lt;K;i++) { ... cout&lt;&lt;&quot;ФИО&quot;&lt;&lt;endl; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
10.11.2010, 12:49     Строки (игнорирует getline) #2
попробуй cin.ignore() вставить перед вводом
Nike0
6 / 6 / 0
Регистрация: 29.11.2009
Сообщений: 55
10.11.2010, 15:14  [ТС]     Строки (игнорирует getline) #3
Цитата Сообщение от accept Посмотреть сообщение
попробуй cin.ignore() вставить перед вводом
оо, большое спасибо
Nike0
6 / 6 / 0
Регистрация: 29.11.2009
Сообщений: 55
18.11.2010, 14:13  [ТС]     Строки (игнорирует getline) #4
есть вопрос, можно ли написать какое-нибудь условие для getline, чтобы кроме пробелов разделителем считалась запятая, т.к. если написать "asfwe, akjf" для первого задания, то ничего не выведет, хотя здесь есть слово, заканчивающееся на гласную букву
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
18.11.2010, 14:59     Строки (игнорирует getline) #5
Nike0, Манипулятор создать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2010, 12:43     Строки (игнорирует getline)
Еще ссылки по теме:

Не работает cin.getline при считывании строки большей буфера - C++
Доброго всем времени суток!:) Проблема состоит в том, что если ввести 4 и более символов cin.getline(boofer, 3); перестаёт работать. Как я...

Отличие getline() от cin.getline() - C++
Чем отличается getline() от cin.getline() ?

Ошибка при использовании getline для считывания строки из файлового потока - C++
Ошибка находится в 24 строке на точке. Код, подобный этому (а в этой строке фактически 1 в 1 одинаковый) я разбирал в институте. Видимо...

С помощью cin.getline считать все строки файла в контейнер (вектор или очередь) - C++
Можете пожалуйсто написать код, где можно с помощью cin.getline считать все строки файла в контейнер (вектор или очередь), потом из...


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

Или воспользуйтесь поиском по форуму:
Nike0
6 / 6 / 0
Регистрация: 29.11.2009
Сообщений: 55
19.11.2010, 12:43  [ТС]     Строки (игнорирует getline) #6
ForEveR, насколько я знаю, манипулятор надо через классы делать, но т.к. мы их еще не проходили, то надо сделать это другим способом. Есть еще какие-нибудь идеи?
Yandex
Объявления
19.11.2010, 12:43     Строки (игнорирует getline)
Ответ Создать тему
Опции темы

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