1. ホーム
  2. c++

[解決済み】ファイルから配列にデータを読み込む

2022-01-25 16:20:46

質問内容

プログラムの出力は、次のようになります。

数値は 101 102 103 104 105 106 107 108 108 110

しかし、私の出力は

数値は 0 0 0 0 0 0 0 0 1606416272 32767

これは私のコードです。

// This program reads data from a file into an array.

#include <iostream>
#include <fstream> // To use ifstream
using namespace std;

int main()
{
    const int ARRAY_SIZE = 10; // Array size
    int numbers[ARRAY_SIZE];   // Array number with 10 elements
    int count = 0;             // Loop counter variable
    ifstream inputFile;        // Input file stream object

    // Open the file.
    inputFile.open("TenNumbers.rtf");

    // Read the numbers from the file into the array.
    while (count < ARRAY_SIZE && inputFile >> numbers[count]){
        count++;
    }

    // Close the file.
    inputFile.close();

    // Display the numbers read:
    cout << "The numbers are: ";
    for (count = 0; count < ARRAY_SIZE; count++){
        cout << numbers[count] << " ";
    }

    cout << endl;

    return 0;
}

これは、データを読み込んでいるTenNumbers.rtfファイルの内容です。

101
102
103
104
105
106
107
108
109
110

UPDATE 1: txtファイルを使ってみましたが、同じような結果になりました。

<ブロッククオート

その数値は 0 0 0 0 0 0 0 0 1573448712 32767

UPDATE 2: 問題の所在がわかりました。この問題を解決するために if (inputFile.good()) ファイルが開かれていないことがわかりました。

どうすればいいですか?

こんにちは、私はあなたのコードをコンパイルしました。.txtでうまく動作しますが、あなたが見るようなストレージナンバーを与えません。 おそらく、存在しない、または赤にすることができないファイルを開いているのでしょう。

// This program reads data from a file into an array.

#include <iostream>
#include <fstream> // To use ifstream
#include <vector>
using namespace std;

int main()
{
    std::vector<int> numbers;
    ifstream inputFile("c.txt");        // Input file stream object

    // Check if exists and then open the file.
    if (inputFile.good()) {
        // Push items into a vector
        int current_number = 0;
        while (inputFile >> current_number){
            numbers.push_back(current_number);
        }

        // Close the file.
        inputFile.close();

        // Display the numbers read:
        cout << "The numbers are: ";
        for (int count = 0; count < numbers.size(); count++){
            cout << numbers[count] << " ";
        }

        cout << endl;
    }else {
        cout << "Error!";
        _exit(0);
    }

    return 0;
}

このスニペットは、ファイルが存在するかどうかをチェックし、存在しない場合はエラーを発生させ、vectorを使用します(c++ではより適切です)。