C ++在函数中写入数组

时间:2015-04-23 10:27:17

标签: c++

问题是,在“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”函数,因为它们工作正常。

1 个答案:

答案 0 :(得分:2)

我的水晶球说:

您的ReadFileLength不仅会计算长度,还会询问文件名 遗憾的是,您忘记将该参数作为参考(std::string& filename)传递,或忘记分配给参数 因此,当函数返回时,文件名仍然是空字符串,并且打开具有该名称的文件必然会失败。

BTW,要求提供文件名并检索文件的长度听起来像是两个不相关的函数,它们都返回单个值,而不是一个函数。