问题是,在“ReadFile”函数运行后,当我尝试在main中访问它们时,数组“data”的内容会变为这些看似随机的数字。相同输入的数字相同。 我认为它与指针或引用有关,但我不知道它是什么。
示例:
INPUT:
4000
-2500
12
-600
-700
3000
输出:
行数:6
2686316
4706252
1
1991562344
4661696
4703488
CODE:
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;
const int MAXN = 100;
string ReadFileName(string& filename) {
cout << "The name of the file: ";
cin >> filename;
return filename;
}
int ReadFileLength(int& linecount, string filename) {
ifstream f;
bool error;
do {
ReadFileName(filename);
f.open(filename.c_str());
error=f.fail();
if(error) {
cout << "Error while tying to open file." << endl;
f.clear();
}
}
while (error);
int tmp;
while (f >> tmp) {
linecount++;
}
f.close();
return linecount;
}
void ReadFile(int* data, int linecount, string filename) {
ifstream f;
f.open(filename);
for(int i=0; i<linecount; i++)
f >> data[i];
f.close();
}
int main() {
int data[MAXN];
bool error;
int readmethod;
int linecount = 0;
string filename;
do {
message1();
cin >> readmethod;
error = cin.fail() || ((readmethod!=1) && (readmethod!=2));
if (error) {
cout << "Wrong Data!" << endl;
cin.clear(); string tmp; getline(cin, tmp, '\n');
}
}
while(error);
if (readmethod==1) {
ReadFileLength(linecount, filename);
ReadFile(data, linecount, filename);
}
else {
//Implement later
}
cout << "Number of lines: " << linecount << endl;
for (int i=0; i<linecount; i++) {
cout << data[i] << endl; //THIS IS WHERE TO PROBLEM SHOWS UP
}
return 0;
}
我从代码中省略了“message1”和“ReadFileLength”函数,因为它们工作正常。
答案 0 :(得分:2)
我的水晶球说:
您的ReadFileLength
不仅会计算长度,还会询问文件名
遗憾的是,您忘记将该参数作为参考(std::string& filename
)传递,或忘记分配给参数
因此,当函数返回时,文件名仍然是空字符串,并且打开具有该名称的文件必然会失败。