std :: cout не работает внутри цикла for - PullRequest
2 голосов
/ 23 июня 2011

Я новичок в C ++ и сейчас учусь на книге под названием Accelerated C ++ . Я закончил третью главу (векторы) и пришел к этому упражнению:

«Напишите программу, чтобы подсчитать, сколько раз каждое отдельное слово появляется на входе».

Подумав, я начал над этим работать. Я хотел протестировать программу, но std :: cout не работал. Я добавил cout << "test"; в несколько мест в моем коде, чтобы увидеть, в чем проблема, и пришел к выводу, что он не работает внутри первого цикла for. Не рекомендую мне использовать карты для решения проблемы, потому что я работаю над векторами. Переменные не на английском языке, поэтому я переведу некоторые из них, чтобы вы знали, что происходит:

recenica - предложение; рижец - слово; vel_vektora - размер вектора; duz_recenice - длина предложения; br_ponavljanja - сколько раз слово встречается в предложении;

#include <vector>
#include <iostream>
#include <string>

using std::string;      using std::vector;
using std::cin;         using std::cout;
using std::endl;



int main()
{
    string rijec;
    vector<string> recenica;

    while (cin >> rijec) recenica.push_back(rijec);
    cout << endl;

    typedef vector<string>::size_type vel_vektora;
    vel_vektora duz_recenice = recenica.size();
    cout << "test0, ";

    for (int i = 0; i < duz_recenice - 1; ++i)            
    {   
        cout << "test, !";
        int br_ponavljanja = 1;

        for (int j = i + 1; j < duz_recenice; ++j)
        {
                cout << "test2, ";
                if (recenica[i] == recenica[j])
                {
                                cout << "test3, ";
                                ++br_ponavljanja;
                                recenica.erase(recenica.begin() + j);
                }     
                cout << "test4, ";
        }        
        cout << recenica[i] << ": " << br_ponavljanja << endl;        
    }
    cout << "test5, ";                
    getchar();
    return 0;        
}

В чем проблема с std::cout?

Ответы [ 2 ]

7 голосов
/ 23 июня 2011

Добавьте << flush, чтобы очистить буфер вывода (каждое место).

Или используйте << endl, который добавляет новую строку и сбрасывает.

Есть проблемы с кодом, особенно для пустого ввода, но это то, что вы хотите узнать, поэтому я оставлю вас на это! : -)

Приветствия и hth.,

1 голос
/ 23 июня 2011

Боюсь, что язык ускользает от меня в терминах имен переменных, но это «работает для меня ™».

Вот мой вывод (первые 3 строки ввода:)

ytreyert
tyryteter
gdhdfgdf
^Z

test0, test, !test2, test4, test2, test4, ytreyert: 1
test, !test2, test4, tyryteter: 1
test5,

Обязательно попробуйте очистить буферы Cout после печати (согласно ответу Альфа).

Я заметил, что gdhdfgdf не считается, это из-за этой строки:

for (int i = 0; i < duz_recenice - 1; ++i)  

Если вы дадите только 1 входное слово, этот цикл не будет работать, как вы делаете duz_recenice = recenica.size(); перед циклом.

Изменение этой строки на

for (int i = 0; i < duz_recenice; ++i)  

решает эту проблему.

...