Bane Bojanić
Bane Bojanić

Reputation: 712

std::cout not working inside a for-loop

I'm new to C++, and right now I'm learning from the book called Accelerated C++. I finished the third chapter (vectors), and I came to this exercise:

"Write a program to count how many times each distinct word appears in its input."

After some thinking, I started working on it. I wanted to test the program, but std::cout wasn't working. I put cout << "test"; on a few places in my code to see where's the problem, and the conclusion is that it doesn't work inside the first for-loop. Don't recommend me to use maps to solve the problem, because I'm working on vectors. The variables aren't in English, so I'll translate some for you to know what's going on:

recenica - the sentence; rijec - a word; vel_vektora - size of the vector; duz_recenice - length of the sentence; br_ponavljanja - number of times a word appears in the sentence;

#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;        
}

What's the problem with the std::cout?

Upvotes: 3

Views: 11402

Answers (2)

badgerr
badgerr

Reputation: 7982

I'm afraid the language eludes me in terms of variable names, but this "Works for Me™".

Here is my output (First 3 lines input:)

ytreyert
tyryteter
gdhdfgdf
^Z

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

You should definitely try flushing the cout buffers after printing (as per Alf's answer).

I notice that gdhdfgdf is not counted, this is because of this line:

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

If you only give 1 input word, this loop will not run, as you do duz_recenice = recenica.size(); before looping.

Changing this line to

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

solves this problem.

Upvotes: 1

Cheers and hth. - Alf
Cheers and hth. - Alf

Reputation: 145204

Add << flush to flush your output buffer (each place).

Or use << endl, which both adds newline and flushes.

There are problems with the code, especially for empty input, but that's what you're out to learn about, so I'll leave you to it! :-)

Cheers & hth.,

Upvotes: 7

Related Questions