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

Не выполняет ввод - C++

Восстановить пароль Регистрация
 
Spirit370
 Аватар для Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
16.02.2014, 00:10     Не выполняет ввод #1
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
#include <iostream>;
#include <cmath>;
#include <vector>;
#include <string>;
#include <algorithm>
#include <windows.h>
 
using namespace ::std;
 
void main () {
    ////Русская мать её кодировка!
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
    //-----------------------------
    //Объявление переменных
    vector<string>disliked;
    vector<string> words;
    string temp = " ";
    char bb = ' ';
    //---------------------------
    //Нежелательные слова
    disliked.push_back("Броколи");
    //-----------------------------
 
    do{ // Начало 
        system("cls"); // Очистка экрана
        while (cin>>temp) {words.push_back(temp); } // Заполняем вектор
    
    cout << "Kol Slov: " << words.size() << endl; // Выводим размер вектора
 
    sort(words.begin(),words.end());// Сортируем весь вектор
 
    
    //Замена нежелательных слов-----------------------------------------------------------------------
    for (int i = 0; i<words.size(); ++i) 
    {
        for (int j = 0; j<disliked.size();j++) {
            if (words[i] == disliked[j]) 
            {
                words[i] = "BLEEP";
            } 
        }
    }
    //------------------------------------------------------------------------------------------------
    
     // Цикл вывода вектора---------------------------------------------
    for (int i = 0; i<words.size(); ++i) 
            if (i==0 || words[i-1] !=words[i]) // Проверка на повторение
                cout << words[i] << "\n";
    //------------------------------------------------------------------
    cout << "Продолжаем?(y/n) -> "; 
    cin >> bb;// Не работает
    }
    while(bb == 'y'); // 
 
system("PAUSE");
}
Программа идёт нормально. Выводит
C++
1
cout << "Продолжаем?(y/n) -> ";
, и после пропускает ввод условия выполнения цикла while !!!
C++
1
cin >> bb;
. Цикл завершается , и вместо возможности запустить его заново,
C++
1
system("PAUSE");
выводит сообщение. В чём тут проблема?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 00:10     Не выполняет ввод
Посмотрите здесь:

C++ выполняет логическое умножение
Цикл выполняет лишнюю иперацию C++
vs 2005 не выполняет программу C++
C++ Не выполняет присвоение
C++ Программа не выполняет вычисления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.02.2014, 00:15     Не выполняет ввод #2
Цитата Сообщение от Spirit370 Посмотреть сообщение
while (cin>>temp)
как вы заставляете остановиться этот цикл?
Spirit370
 Аватар для Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
16.02.2014, 00:21  [ТС]     Не выполняет ввод #3
Цитата Сообщение от Enotniy Посмотреть сообщение
как вы заставляете остановиться этот цикл?
В системе windows поток ввода можно остановить нажатием клавиш <Ctrl+Z> , а в Unix -- <Ctrl+D> .

Просто, вместо ввода строки нажмите <Ctrl+Z> , и после нажмите <Enter>.
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.02.2014, 00:34     Не выполняет ввод #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Spirit370, ну так вот и проблема - у вас в потоке остается мусор - его надо очистить,
C++
1
 cin.clear();
Добавлено через 1 минуту
Spirit370, и это плохая идея использовать конец потока (EOF)
Spirit370
 Аватар для Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
16.02.2014, 00:44  [ТС]     Не выполняет ввод #5
Цитата Сообщение от Enotniy Посмотреть сообщение
Spirit370, ну так вот и проблема - у вас в потоке остается мусор - его надо очистить,
C++
1
 cin.clear();
Добавлено через 1 минуту
Spirit370, и это плохая идея использовать конец потока (EOF)
Спасибо , я и не знал таких особенностей потоков =)
Enotniy
 Аватар для Enotniy
96 / 95 / 14
Регистрация: 15.01.2014
Сообщений: 283
16.02.2014, 00:52     Не выполняет ввод #6
Spirit370, проблема в том что что вот эти символы конца строки так и остаются лежать в потоке, когда вы пишите cin они автоматически помещются в вашу переменную bb и поэтому не останавливается
Yandex
Объявления
16.02.2014, 00:52     Не выполняет ввод
Ответ Создать тему
Опции темы

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