gpt4 book ai didi

c++ - std::getline 从 istream 到 string[] 多次空白

转载 作者:行者123 更新时间:2023-11-28 07:01:41 24 4
gpt4 key购买 nike

所以我有这个构造函数

A::A(std::istream& is)
{
if (validation(is))
{
std::string line[SIZE];
unsigned int i = 0;

while((std::getline (is, line[i])&& i < SIZE))
{
i++;
}
....

验证看起来像这样,它将 IS 存储在一行中并进行一些测试并返回一个 bool 值。它工作得很好,但是这个构造函数中的第二个 getline 是空白的(没有存储在行中)。如果我注释掉验证,它就可以正常工作。所以我猜这与 getline 和 buffer 有关。我试图清除,但我不擅长流。

如果有人猜到了,谢谢!

主要

ifstream myfile("file.txt");
A a(myfile);

验证.cpp

bool validation(std::istream& is)
{
string line[SIZE];
unsigned int i = 0;

bool valide = false;

while((std::getline(is, line[i])&& i < SIZE))
{
i++;
}
....

最佳答案

如果validation有一个 while((std::getline(p_is, line[i]) && i < SIZE))循环,它获取的那些行已从流中消失,不会被 getline 看到直接在A::A .出于这个原因,getline()返回 false和你的 while循环退出,并且任何 line[]等于或超过 i 的元素仍然是空的。

需要一个单独的验证函数是相对不常见的……只需尝试读入将存储数据的变量,并在进行时进行验证。

如果您决定单独进行验证,您可以在使用 is.seekg(0) 验证后查找文件的开头。 (有关文档,请参阅 here),甚至重新打开文件..

关于c++ - std::getline 从 istream 到 string[] 多次空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22364799/

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