【发布时间】:2019-03-14 00:45:40
【问题描述】:
基本上,我不确定为什么会发生这种情况,但我真的很想弄清楚。这是我的一个想法,我正在努力让它发挥作用。
所以我要做的是:基本上从文件中读取字符串并将它们存储到数组中。
但是,我想这样做:
我不想为某个给定的常数初始化数组的大小,而是希望有一个循环,它首先读取文件中的行数并将该值分配给一个变量。因此,该值将是数组的大小,因为该值将对应于我要存储在数组中的元素数量。 我希望文件中的每一行文本,所以对于每个字符串,都是数组的一个元素。
代码如下:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
ifstream the_file;
int i, j, z;
string lineCount;
the_file.open("sentence.txt");
j = 0;
while(!the_file.eof())
{
getline(the_file, lineCount);
j++;
}
z = j;
string array[z];
for (i = 0; i < z; i++) {
getline(the_file, array[i]); // Array is empty
cout << i << " " << array[i] << endl;
}
cout << z << endl;
return 0;
}
所以在得到这个数字之后,我接下来想将元素实际存储在数组中。 对于这一部分,我使用了一个 for 循环进行尝试,并让循环执行 (array size - 1) 次数以对应于存储在数组的一个索引中的每个元素。
我只是不明白为什么,运行它后,它显示数组是空的。它表明数组的大小与文件中的行数相对应,但在任何内存空间中似乎都没有任何元素。
问题是,我尝试简单地将数组设置为给定的常量大小。所以基本上只是简单地从文件中读取元素并将它们存储在数组中,而无需执行第一个循环来确定设置数组的大小。在这种情况下,它可以正常工作,并且所有元素都可以正常存储,并且没有一个内存空间是空的。
但是为什么如果我想做一个循环以使值与我希望数组的大小相对应,然后尝试存储这些元素,就好像文件没有被读取正确了,分配的内存空间是空的?
这是输出:
/Users/macuser/CLionProjects/PA2supp/cmake-build-debug/PA2supp
0
1
2
3
4
5
Process finished with exit code 0
这是我要阅读的文件,这是“sentence.txt”。就像我说的,我希望每一行都成为我数组中的一个元素
This is just one sentence.
This is the second sentence.
This is the third sentence.
This is the fourth sentence.
Fifth sentence right here.
请不要建议使用向量,虽然我知道向量的一些好处,但我真的很想使用数组来做这个特定的事情。
【问题讨论】:
-
你的第一个
while循环会消耗整个文件(while(!f.eof())的问题除外),那么你怎么能指望从头开始阅读呢? -
总是测试诸如调用
getline之类的东西,以确保它正确读取
标签: c++ arrays for-loop while-loop fstream