Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
16 / 16 / 13
Регистрация: 08.11.2014
Сообщений: 119
1

Почему при использовании getline( std::cin, str ) строка считывается не так, как ожидается?

09.09.2016, 19:52. Просмотров 660. Ответов 1
Метки нет (Все метки)


Цель программы: При вводе строки, подсчитывает количество гласных букв.
Проблема: При вводе количества строк, сразу выдает 0 букв, а последующие строки подсчитывает нормально.

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
using namespace std;
 
void f(const string& str);
 
int main()
{
    setlocale(LC_ALL, "");
 
    int num_of_lines;
    cin >> num_of_lines;
 
    string temp;
 
    for (int i = 0; i < num_of_lines; i++)
    {
        getline(cin, temp);
        f(temp);
        temp.clear();
    }
 
 
    system("pause");
    return 0;
}
 
void f(const string& str)
{
    int j = 0, count = 0;
    char words[6] = { 'a', 'o', 'u', 'i', 'e', 'y' };
 
    for (int i = 0; i < str.length(); i++)
    {
        j = 0;
        while (words[j] != '\0')
        {
            if (str[i] == words[j])
            {
                count++;
            }
            j++;
        }
    }
    cout << count << endl;//вывод количества гласных букв
}
Добавлено через 8 минут
Проблема решена. Не очистил поток cin.get()-ом.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2016, 19:52
Ответы с готовыми решениями:

Почему портится поток cin при использовании функции getline
char a; cin.getline(a,5); cin.clear(); При вводе свыше 5 символов после функции getline надо...

Безконечый цикл при использовании cin и getline()
Здравствуйте, Есть вот такой простенький кусок кода: string tempid; string...

При множественном наследовании не работает getline(std::cin, ?)
Изучаю множественное наследование, так вот, нужно ввести два слова, но программа просто пропускает ...

getline(cin, str) и cin>>
Добрый день. Есть код: ... string str; int N; cin&gt;&gt; N; getline(cin, str); cout&lt;&lt;str&lt;&lt;endl;...

1
14 / 16 / 8
Регистрация: 21.05.2016
Сообщений: 48
09.09.2016, 19:56 2
Тебе поможет вот что:
cin.ignore();

перед строчкой:
for (int i = 0; i < num_of_lines; i++)


Если интересно почему, тогда сюда:
cin.getline работает через раз
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.09.2016, 19:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Метод cin.getline(str,n,'\n'), если в строке более n-1 символа
Помогите пожалуйста! Насколько знаю метод cin.getline(str,n,'\n'), должен считать n-1 символ из...

Почему при вводе элементов массива, программа прекращает работу или работает не так, как ожидается?
При вводе элементов массива, программа прекращает работу или не правильно работает. Например если...

Локаль в std::cin.getline (вижуал с++)
собственно выводит в консоль нормально, а вот после считывания с консоли в символьный массив...

Почему malloc работает не так, как ожидается?
int main() { int* p =malloc(sizeof(int)); p=5; printf(&quot;%s\n&quot;,strerror(errno)); ...


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

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

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