读取数字的文本文件并存储到C ++中的整数数组中

时间:2016-04-27 04:09:20

标签: c++ arrays text-files

我需要从文本文件中存储一个整数数组,但我无法找到我需要做的事情。我认为我有代码设置的基础,但我认为我需要将元素转换为整数或其他东西?

我的输出是我的清单:

50 0 20 10 18 -5 15 22 34 -1

但我的"排序"列表最终为-1,以及一系列大的负数。 我解决了这个数组错误的问题。

#include <iostream>
#include <fstream>
using namespace std;
int main() 
{
    int array1[30];
    int counter=0,n=0;
    fstream datafile;
    void bubbleSort(int list[], int length);
    void selectionSort(int list[], int length);
    /////////////
    datafile.open("data.txt");
    if (!datafile.is_open())
    {
        cout << "Failure to open." << endl;
        return 0;
    }
    while (!datafile.eof()) {
        datafile >> array1[counter];
        n++;
        cout << array1[counter] << endl;
    }
    datafile.close();
    //////////////////////////////
    //bubbleSort(array1, n);
    //selectionSort(array1, n);
    for (int i = 0; i < n; i++)
        cout << array1[i] << ", ";

    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:1)

永远不要使用eof(),因为它会导致错误的程序。请参阅https://stackoverflow.com/a/5837670了解原因。

while (n < 30 && datafile >> array1[n]) {
    cout << array1[n] << endl;
    n++;
}
{
    int excess;
    if (datafile >> excess) {
        cerr << "error: data file too large\n";
        return;
    }
}

这样,n在程序结束时就会正确。

答案 1 :(得分:0)

你的代码很好,除了:

 while (!datafile.eof()) {
        datafile >> array1[counter];
        n++;
        cout << array1[counter] << endl;
    }

应该是:

while (!datafile.eof()) {
        datafile >> array1[n];
        if ( datafile.fail() ) break; 
        cout << array1[n] << endl;
        n++;
    }

只需要一个索引变量(n)就可以解析/存储到一维数组中。 一段时间内的增量语句n++应始终是最后一个,以便您处理当前元素而不是下一个元素。

代码:

#include <iostream>
#include <fstream>
using namespace std;
int main() 
{
    int array1[30];
    int n=0;
    fstream datafile;
    void bubbleSort(int list[], int length);
    void selectionSort(int list[], int length);
    /////////////
    datafile.open("data.txt");
    if (!datafile.is_open())
    {
        cout << "Failure to open." << endl;
        return 0;
    }
    while (!datafile.eof()) {
        datafile >> array1[n];
        if (datafile.fail()) break;
        cout << array1[n] << endl;
        n++;
    }
    datafile.close();
    for (int i = 0; i < n; i++)
        cout << array1[i] << ", ";

    system("pause");
    return 0;
}