从文件到数组重复读取,最后一个元素总是错误的

时间:2016-08-05 18:50:03

标签: c++ arrays recursion

#include <iostream>
#include <fstream>
using namespace std;

int fillArray(ifstream& ifs, int array[]){
    int cur;
    int counter = 0;

    if(ifs>>cur){
        counter = fillArray(ifs, array) + 1;
        array[counter-1] = cur;
    }

    return counter;
}



int main(int argc, const char * argv[]) {

    int count;
    int array[] = {0};
    ifstream myfile ("/Users/Desktop/example.txt");


    count = fillArray(myfile, array);

    for (int i = 0; i<count; i++){
        cout<<array[i]<<endl;
    }

    myfile.close();

    return 0;
}

例如,如果输入文件为&#34; 1 2 3 100 19 16 33&#34;,则生成的数组为&#34; 33 7 19 100 3 2 1&#34;。 如果输入文件是&#34; 1 2 3 4 5&#34;,则数组将是&#34; 5 5 3 2 1&#34;。 我不介意反向填充,但我不明白第二个最后一个发生了什么。

这段代码在VS中运行良好,只在xcode中有问题。

1 个答案:

答案 0 :(得分:3)

此代码只是偶然“在VS中正常工作”。它创建一个包含一个元素的数组,然后存储在数组的末尾,因此它深入到未定义的行为。使用std::vector<int>;而不是硬编码数组;这将允许您添加所需的元素。每次获得新元素时,您都可以调用push_back将其放入向量中。