gpt4 book ai didi

c++ - 从 getline 读取到非空字符串时出现意外输出

转载 作者:行者123 更新时间:2023-11-27 23:12:55 26 4
gpt4 key购买 nike

我对“istream& getline (istream& is, string& str)”函数感到困惑,根据http://www.cplusplus.com/reference/string/string/getline/ ,以下程序:

#include <iostream>
#include <sstream>

int main()
{
std::istringstream s("this is a test");
std::string line = "line ";
getline( s, line );
std::cout << line << std::endl;
s.str("test again");
getline( s, line );
std::cout << s.str() << std::endl;
std::cout << line << std::endl;

return 0;
}

我希望输出是:

行这是一个测试

再次测试

再次测试

但是当我在 Visual Studio 上测试它时,输出是:

这是一个测试

再次测试

这是一个测试

谁能为我解释一下令人沮丧的功能?

最佳答案

清除 getline 调用之间的错误标志:

int main()
{
std::istringstream s("this is a test");
std::string line = "line ";
getline( s, line );
std::cout << line << std::endl;
s.str("test again");
s.clear() // <<<--------------- to clear error flags
getline( s, line );
std::cout << s.str() << std::endl;
std::cout << line << std::endl;

return 0;
}

第一个 getline 在流上设置 eofbit。第二个失败,line 保持完整。

通过修复,您将获得:

this is a test
test again
test again

因为 getline 没有添加到字符串中,所以它替换了内容。

关于c++ - 从 getline 读取到非空字符串时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896114/

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