所以我有一个类:
class myClass {
public:
void readFile();
private:
int sPerDay[10];
};
我想要这个函数来读取/打印文本文件的数组(一堆10行长的数字)
void myClass::readFile()
{
ifstream read("numbers.txt");
for(int i=0;i<10;i++)
read>>sPerDay[i];
for (int i = 0;i<10;i++) {
cout << sPerDay[i];
}
}
输出是一堆随机数。我哪里错了?
如果您不确定文件是否存在,或者它是否与可执行文件在同一目录中,请修改代码以检查文件是否打开,例如:
void readFile() {
ifstream read("numbersd.txt");
if(!read) { cerr << "File didn't open..Does it exist?" << endl; return; }
...
然后,如果它没有打开,以下是可能发生的一些事情:
- 文件不存在
- 文件不在您认为的路径中
- 您没有访问该文件的权限
问题在于文件,因为代码运行良好,假设文件numbers.txt存在(并且它与您的可执行文件在同一目录中),我使用了这个文件,例如:
1
2
3
4
5
6
7
8
9
10
结果是:
C02QT2UBFVH6-lm:~ gsamaras$ g++ main.cpp
C02QT2UBFVH6-lm:~ gsamaras$ ./a.out
1 2 3 4 5 6 7 8 9 10
这是我从你那里使用的代码:
#include <iostream>
#include <fstream>
using namespace std;
class myClass {
public:
void readFile() {
ifstream read("numbers.txt");
for(int i=0;i<10;i++)
read>>sPerDay[i];
for (int i = 0;i<10;i++) {
cout << sPerDay[i] << " ";
}
cout << "n";
}
private:
int sPerDay[10];
};
int main() {
myClass obj;
obj.readFile();
return 0;
}
您可能做错了很多事情。
1) 文件numbers.txt
不存在,并且此代码无法检查文件是否已成功打开。
2) 文件numbers.txt
存在,但不包含由空格分隔的十个整数,并且此代码无法检查operator>>
是否成功。
3) 此代码还将10个数字打印到std::cout
,不带任何分隔字符。在最好的情况下,您将得到的输出看起来是第一行的大数字。
所以,这里至少有两三件事是错误的。你需要修复所有这些:
A) 请验证文件是否已成功打开。
B) 在每次调用operator>>
之后,检查文件流是否为good()
。