gpt4 book ai didi

c++ - 遇到 EOF 时的 std::cin 语法

转载 作者:行者123 更新时间:2023-11-28 08:03:21 26 4
gpt4 key购买 nike

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

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++ primer》中的一个习题,答题簿中的代码也没有解决问题。

最佳答案

您对之前输入的内容并不太具体。当 >>>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;
}

关于c++ - 遇到 EOF 时的 std::cin 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10811832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com