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

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

Восстановить пароль Регистрация
 
Nike0
6 / 6 / 0
Регистрация: 29.11.2009
Сообщений: 55
10.11.2010, 11:12     Строки (игнорирует getline) #1
Доброго времени суток. Столкнулся с такой проблемой: для ввода строки использую в двух случаях 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.11.2010, 14:59     Строки (игнорирует getline) #5
Nike0, Манипулятор создать.
Nike0
6 / 6 / 0
Регистрация: 29.11.2009
Сообщений: 55
19.11.2010, 12:43  [ТС]     Строки (игнорирует getline) #6
ForEveR, насколько я знаю, манипулятор надо через классы делать, но т.к. мы их еще не проходили, то надо сделать это другим способом. Есть еще какие-нибудь идеи?
Yandex
Объявления
19.11.2010, 12:43     Строки (игнорирует getline)
Ответ Создать тему
Опции темы

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