从文件中读取数据到数组中

Reading data from file into an array

程序输出应该是:

The numbers are: 101 102 103 104 105 106 107 108 108 110

但我的输出是:

The numbers are: 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

更新 1: 我尝试使用 txt 文件,但结果相似。

The numbers are: 0 0 0 0 0 0 0 0 1573448712 32767

更新 2: 我找到了问题所在。在 运行 if (inputFile.good()) 之后我发现文件没有被打开。

您的文件名有 rtf 作为后缀。它包含任何 RTF 信息吗?

我在您的代码中看到的错误是,您假设在打印数字时成功读取了 ARRAY_SIZEint

使用:

// Display the numbers read:
cout << "Number of ints read: " << count << std::endl;
cout << "The numbers are: ";
for (int i = 0; i < count; i++){
    cout << numbers[i] << " ";
}

这很可能会揭示读取数据时的任何问题。

ARRAY_SIZE是你在数组中分配的int个数;也就是说,它是 int 的最大数量。

count 是从文件中读取的实际整数数。所以你的最终循环应该达到 count 因为那是实际数据的数量。所以打印数据的循环应该是:

int i;
for (i = 0; i < count; ++i)
    cout << numbers[count] << " ";

或者你可以走指针:

int *start;

for (start = numbers; (numbers - start) < count; ++numbers)
    cout << *numbers << " ";

此外,我认为文件扩展名应该是 "txt" 而不是 "rtf",但这没有什么区别。

RTF 文件不仅仅是纯文本(它被标记包围)并且字符编码可能不同,从而导致对数字的错误解释。

因此,在您的阅读循环中:

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

输入流 inputFile 默认情况下会跳过空格,在您的情况下,这些空格的编码可能会有所不同,从而以某种方式被跳过或弄乱。

注意:尝试并添加一个测试行,在将其存储在数组中之前打印读数。

您好,我已经编译了您的代码,使用 .txt 它运行良好,没有给出您看到的 strage numbers。 所以很可能你打开的是一个不存在的文件,或者不能红

// 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;
}

此代码段检查文件是否存在,如果不存在则引发错误,并使用向量(更适合 c++)

我以前也遇到过这个问题。我将内容复制到一个新文件中并另存为不同的名称。然后再运行就好了