遇到EOF时的std :: cin语法

时间:2012-05-30 07:29:40

标签: c++ cin

这段代码只是为了实现一个函数,当你输入两个相同的字符串时, 功能停止。

string predata;
string c_data;  //current data

cout << "please input string data" << endl;

//loop
while (cin >> c_data) {

    if (c_data == predata) {
        cout << "the " << c_data << " is the same one" << endl;
        break;
    }   
    else {
        predata = c_data;
    }   

    cout << "please input next word" << endl;
}   

if (c_data != predata)
    cout << "there's no repeated word" << endl;

问题:当我使用CTRL-D来停止cin时,c_data不会改变,并且它永远不会输出“没有重复的单词”,那怎么能我决定判断?

PS :这是“c ++入门”中的一个练习,答案书中的代码也没有解决问题。

3 个答案:

答案 0 :(得分:1)

您对以前输入的内容并不太具体。何时>>std::string失败,它将右手操作数留在 未指明的状态。 (如果这实际上是书中的代码,我会 扔掉书。)

这里最简单的解决方案是使用标志:

std::string previous;
std::string current;
bool duplicateSeen = false;
std::cout << "Please input initial string" << std::endl;
std::cin >> previous;
if ( std::cin ) {
    //  Code needs at least one input to compare...
    while ( ! duplicateSeen && std::cin >> current ) {
        duplicateSeen = current == previous;
        previous = current;
        std::cout << "Please input the next word" << std::endl;
    }
}
if ( duplicateSeen ) {
    std::cout << '\"' << previous << "\" is duplicated" << std::endl;
} else {
    std::cout << "No repeated words" << std::endl;
}

答案 1 :(得分:0)

我认为当你点击CTRL-D时,就会中断运行。

试试这个:

while (cin >> c_data) {

if (c_data == "<EXIT>") break;

....
}

答案 2 :(得分:0)

这可能是一个解决方案:

c_data = "eof is setted";

while (cin >> c_data) {

    if (c_data == predata) {
        cout << "the " << c_data << " is the same one" << endl;
        break;
    }   
    else {
        predata = c_data;
        c_data = "eof is setted";
    }   

    cout << "please input next word" << endl;
}   

if (c_data != predata)
    cout << "there's no repeated word" << endl;