std :: cout在for循环中不起作用

时间:2011-06-23 08:21:59

标签: c++ for-loop cout

我是C ++的新手,现在我正在学习名为 Accelerated C ++ 的书。我完成了第三章(向量),我参加了这个练习:

“编写一个程序来计算每个不同单词在其输入中出现的次数。”

经过一番思考,我开始研究它。我想测试程序,但是std :: cout无法正常工作。我将cout << "test";放在我的代码中的几个位置以查看问题的位置,结论是它在第一个for循环中不起作用。不建议我使用地图来解决问题,因为我正在研究向量。变量不是英文的,所以我会翻译一些让你知道发生了什么:

recenica - 句子; rijec - 一个字; 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 个答案:

答案 0 :(得分:7)

添加<< flush以刷新输出缓冲区(每个地方)。

或者使用<< endl,它们都会添加新行和刷新。

代码存在问题,特别是对于空输入,但这就是你要了解的内容,所以我会告诉你的! : - )

干杯&amp;第h。,

答案 1 :(得分:1)

我担心这个语言在变量名称方面难以理解,但这个“为我而工作”。

这是我的输出(前3行输入:)

ytreyert
tyryteter
gdhdfgdf
^Z

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

你绝对应该在打印后尝试冲洗cout缓冲区(根据Alf的回答)。

我注意到gdhdfgdf没有计算,这是因为这一行:

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

如果你只提供1个输入字,那么这个循环将不会运行,就像你在循环之前duz_recenice = recenica.size();一样。

将此行更改为

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

解决了这个问题。