2014-06-13 53 views
0

我一直在试图执行什么应该是从文件中读取一行文本并将其保存到数组中的相对简单的任务。不幸的是,这只是没有工作,而是简单的程序根本不读任何东西。这是哪门子的代码,我想使用:从文件读入数组C++

ifstream in_stream; 
int x=0; 
string array[150] 
in_stream.open("file.txt"); 

while(!in_stream.eof()){ 
    in_stream>>array[x]; 
    x++; 
} 

我也试图用如下函数getline:

ifstream in_stream; 
int x=0; 
string array[150] 
in_stream.open("file.txt"); 

while(!in_stream.eof()){ 
    getline(in_stream, array[x]); 
    x++; 
} 

无论模式下工作,也不会读任何东西放入数组而是叶子它空白... 我只是不知道什么是错的,所以如果有人可以帮助那将是盛大的!

+0

作为一个附注,你应该使用'std :: vector'而不是数组。然后,你不必担心文件的大小。 – crashmstr

+0

在这两个示例中,'string array [150]'后面都缺少分号。 – Cameron

+0

我不认为这是导致你有问题,但在做in_stream >> array [x]之前检查EOF;也不保证该操作将起作用。你应该检查你是否已经成功读取了数据。 –

回答

0

看,这是我的file.txt的内容:

ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 

10行准确

,这就是存储在尺寸== 20的阵列的数据:

ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 
ifojgoidfjjfdogdifjgdjgdoigjdoijdofi 

10行太!

如果使用getline,则每行将被存储到阵列中的某个位置。如果文件的大小不够大和/或数组的大小太大,则只能看到空白空间被打印出来。首先,确保你的数组足够短或文件的大小足够大。无论如何,getline的解决方案可以工作。我没有测试ifstream的解决方案,但情况与第一个类似。

希望它有帮助!

1

它来检查该文件实际上在尝试,如果该文件无法打开,你就不会开始填充阵列从中读出,在你面前的情况下成功打开是很重要的。

正如christianm所说,这是更好地使用一个std ::载体,因为它可以让你处理任何大小的文件。因此,我的建议是重构你的代码如下:

std::ifstream in_stream("file.txt"); 

if(!in_stream.good()) 
{ 
    std::cerr << "Error opening file!" << std::endl; 
    //More error handling code goes here 
} 

std::vector<std::string> lines; 
while(!in_stream.eof()) 
{ 
    std::string line; 
    std::getline(in_stream, line); 
    lines.push_back(line); 
} 

std::cout << "Read: " << lines.size() << " lines." << std::endl; 

有一点要记住的关于ifstream的是,它会打开你传递给它在你的测试用例的相对路径的字符串。这意味着您必须从包含file.txt的同一目录启动程序,在程序启动后更改工作目录,或者提供完全限定的路径。