这段代码只是为了实现一个函数,当你输入两个相同的字符串时, 功能停止。
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 ++入门”中的一个练习,答案书中的代码也没有解决问题。
答案 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;