使用Ifstream将数字从文本文件添加到C样式数组中

|| 我在上面的标题时遇到了麻烦。我已经尝试了以下方法,但是它不能以正确的方式起作用。
void ArrayIntStorage::read(ifstream& in)
{
    if(in.is_open())
    {
        while(!in.eof())
        {
            in.getline(arrayStorage, sizeof(in));
        }
    }
}

ofstream& ArrayIntStorage::write(ofstream &out) const
{
    for (int i = 0; i < sizeof arrayStorage; i++)
    {
        out << arrayStorage[i] << endl;
    }
    return out;
}
我是C ++编程的新手,所以我可能在做一些愚蠢的事情。提前致谢。
已邀请:
我猜你正在读/写一个整数数组。看来您可能错误地读取了sizeof(in),而不是您的read方法中的sizeof(arrayStorage)。
您的代码有几个问题。首先,你 不要向我们显示ѭ1的声明,所以我们必须 猜猜:我猜guess2ѭ(其中where3ѭ是一些 不变)。接下来,阅读: 在循环中使用`istream :: eof`永远是不正确的。这个 一旦输入失败,功能才有意义;之前 那,当没有其他要 读取和“ true”,即使最后一次输入成功。的 您感兴趣的功能是“失败”,即 每当在其中使用`istream`时间接调用 需要“布尔”的上下文。 getline需要一个char []并读取字符,而不是 的。 如果所有文件都包含这些int \,则为标准成语 阅读它们将是:
for (int i = 0; in && i < N; ++ i) {
    in >> arrayStorage[i];
}
在实践中,您可能会想要更多:如果出现错误, 文件中包含的int不够?如果包含太多? 并且您将要在失败后验证该失败 是由于文件结尾,而不是由于文件中的一些乱码 文件。或者,您可能想要(或需要)进一步验证格式, 确保一行中不超过一个int。 您的输出函数看起来几乎没问题;最后一个索引应该是
N
,而不是
sizeof arrayStorage
(它返回数组中的字节数,而不是元素数)。后来,下游, 您将要检查之后是否没有错误 关闭文件;没有比这更令人沮丧的了 一个说成功的程序,实际上只有一部分 数据将其存入磁盘。

要回复问题请先登录注册