使用数据文件

时间:2015-12-08 06:15:45

标签: c++ arrays pointers dynamic-allocation

在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的文本文件中读取项目并将它们存储在一个数组中。我在我包含的示例中使用了指针(考虑到我对poniters不太了解,这可能不是最好的主意)。当我运行此程序时,无论文件中的数据如何,当我尝试通过包含cout << *(users + 1)来测试值时,我都没有得到任何结果。它只是在窗口中留下一个空白行。我猜我的错误是在我使用指针或我如何在指针本身分配值。我想知道是否有人能够指向我正确的方向如何将正确的值输入数组。谢谢!

2 个答案:

答案 0 :(得分:0)

尝试在

之后重新打开用户名
    while(usern >> otherdata)
    i++;
也许,试试投入

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

之后。

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

帮助我找到这样的问题的一件事就是把一个cout&lt;&lt; “循环”;或者在for循环中的某些东西,所以你知道你至少进入了for循环。

你也可以用usern.seekg(0,ios :: beg);

做同样的事情

答案 1 :(得分:0)

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

while(usern >> otherdata)
    i++;

然而,这会将文件指针带到文件的末尾,这意味着为了读取文件,您需要将文件指针移动到文件的开头,然后再将其重新读入您的字符串数组中已分配大小i。这可以通过在while循环后添加usern.seekg(0, ios::beg);来实现,如下所示。 (有关文件指针的详细教程,请参阅here。)

while(usern >> otherdata)
    i++;

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

// The rest of your code.

警告:我不确定动态分配STL容器的安全性如何,我之前遇到过与您类似的代码问题,并建议远离功能代码。