繁体   English   中英

使用数据文件动态分配数组

[英]Dynamically Allocating Array With Datafile

在C ++项目中,我一直在尝试使用数组来存储文本文件中的数据,以供以后使用。 我一直在初始化没有大小的数组时遇到问题。 这是我一直在做的基本示例:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    int i = 0;
    ifstream usern;
    string data;
    string otherdata;
    string *users = nullptr;


    usern.open("users.txt");

    while(usern >> otherdata)
        i++;

    users = new (nothrow) string[i];

    for (int n = 0; usern >> data; n++)
    {
        users[n] = data;
    }


    usern.close();
    return 0;
}

这是我提出的一个很粗糙的例子。 基本上,我尝试从名为users.txt的文本文件中读取项目并将它们存储在数组中。 我在所包含的示例中使用了指针(考虑到我对编织器不太了解,这可能不是最好的主意)。 当我运行该程序时,无论文件中的数据如何,当我尝试通过包含cout << *(users + 1)来测试值时,都不会得到任何结果。 它只是在窗口中留下一个空白行。 我猜我的错误是我使用指针或如何在指针本身中分配值。 我想知道是否有人可以向我指出如何将正确的值放入数组的正确方向。 谢谢!

尝试在之后重新打开usern

    while(usern >> otherdata)
    i++;

也许,尝试放入

usern.close();
ifstream usern2;
usern2.open("users.txt");

在那之后。

可能还有其他问题,但这对我来说似乎是最有可能的问题。 如果您在此方面取得成功,请告诉我。 在我看来,似乎usern已经达到了eof,然后您尝试再次读取它。

可以帮助我找到此类问题的一件事就是放一个喊子<<“循环”; 或for循环内的内容,这样您就知道至少要进入该for循环。

您也可以使用usern.seekg(0,ios :: beg);做同样的事情。

我认为代码中发生的事情是,您已将指针移到文件中,该指针显示了从中读取文件的位置。 使用以下代码迭代要读取的字符串数时,会发生这种情况。

while(usern >> otherdata)
    i++;

但是,这会将文件指针带到文件末尾,这意味着,要读取文件,您需要先将文件指针移至文件的开头,然后再将其重新读入已分配大小的字符串数组中i 可以通过添加usern.seekg(0, ios::beg); 在您的while循环之后,如下所示。 (有关文件指针的良好教程,请参见此处 。)

while(usern >> otherdata)
    i++;

// Returns file pointer to beginning of file.
usern.seekg(0, ios::beg);

// The rest of your code.

警告:我不确定动态分配STL容器的安全性,我以前遇到过与您的代码类似的问题,建议您在功能代码中避免这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM