0

このコードは、同じ文字列を2回入力すると、関数が停止する関数を実現するためのものです。

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 ++入門書》の1つの演習であり、解答集のコードも問題を解決しませんでした。

4

3 に答える 3

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;
}
于 2012-05-30T09:13:43.360 に答える
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;
于 2012-05-30T07:55:37.840 に答える
0

を打つCTRL-Dと、実行が中断されると思います。

これを試して:

while (cin >> c_data) {

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

....
}
于 2012-05-30T07:36:44.877 に答える