将数据从文件读入数组

时间:2015-09-06 20:03:41

标签: c++ arrays file ifstream

程序输出应为:

  

数字为:101 102 103 104 105 106 107 108 108 110

但我的输出是:

  

数字为:0 0 0 0 0 0 0 0 1606416272 32767

这是我的代码:

{{1}}

这是TenNumbers.rtf文件的内容,我正在阅读以下数据:

{{1}}

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

  

数字为:0 0 0 0 0 0 0 0 1573448712 32767

更新2: 我找到了问题所在。运行{{1}}后,我发现文件没有打开。

5 个答案:

答案 0 :(得分:2)

您好我已编译您的代码,.txt运行良好,没有给出您看到的strage数字。 因此,您可能正在打开一个不存在或不能为红色的文件。

// 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 ++中)

答案 1 :(得分:1)

您的文件名后缀为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] << " ";
}

这很可能会在阅读数据时发现任何问题。

答案 2 :(得分:1)

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

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”,但这并没有什么区别。

答案 3 :(得分:0)

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

所以,在你的阅读循环中:

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

默认情况下,输入流inputFile正在跳过空格,在您的情况下可能会以不同方式进行编码,从而以某种方式跳过或搞砸。

注意:在将数据存储到数组中之前,请尝试并添加测试行,以打印读取的数字。

答案 4 :(得分:0)

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