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

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

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

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

10.11.2010, 11:12. Просмотров 586. Ответов 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)
Посмотрите здесь:

считывание строки cin.getline() C++
C++ Игнорирует строку с getline
С помощью cin.getline считать все строки файла в контейнер (вектор или очередь) C++
C++ Функция getline считывает несколько строк из файла, игнорируя символ новой строки
C++ Ошибка при использовании getline для считывания строки из файлового потока
Не работает cin.getline при считывании строки большей буфера C++
Функция getline пропускает ввод строки C++
Отличие getline() от cin.getline() C++
C++ Как заполнить циклично строки через getline?
Объясните разницу между "cin.getline" и "std::getline" C++
Std::getline и длинные строки C++
C++ Считывание строки getline

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 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:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru