C++ 将文件中的数据读入数组

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32427750/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-28 14:08:50  来源:igfitidea点击:

Reading data from file into an array

c++arraysfileifstream

提问by Dante Greyson

The program output Should be:

程序输出应该是:

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

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

But my output is:

但我的输出是:

The numbers are: 0 0 0 0 0 0 0 0 1606416272 32767

数字是:0 0 0 0 0 0 0 0 1606416272 32767

This is my code:

这是我的代码:

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

This is the contents of the TenNumbers.rtf file I'm reading the data from:

这是我正在读取数据的 TenNumbers.rtf 文件的内容:

101
102
103
104
105
106
107
108
109
110

UPDATE 1: I tried using txt file but the results are similar.

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

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

数字是:0 0 0 0 0 0 0 0 1573448712 32767

UPDATE 2: I found where the issue was. After running if (inputFile.good())I found out the file was not getting opened.

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

回答by Naramsim

Hi I have compiled your code, with the .txt it runs well, without gives the strage numbers that you see. So probably you are opening a file that does not exists, or can not be red.

嗨,我已经编译了你的代码,它运行良好的 .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;
}

This snippet checks if the file exists, raises an error if not, and uses a vector(more suitable in c++)

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

回答by R Sahu

Your file name has rtfas suffix. Does it contain any RTFinfo in it?

您的文件名有rtf后缀。它是否包含任何RTF信息?

The error that I see in your code is that you are assuming ARRAY_SIZEnumber of ints were successfully read when you are printing the numbers.

我在您的代码中看到的错误是您假设在打印数字时成功读取ARRAY_SIZEints 的数量。

Use:

用:

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

This will, most likely, reveal any problems in reading the data.

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

回答by Edward Karak

ARRAY_SIZEis the number of ints you allocated in the array; that is, it is the max number of ints.

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

countis the actual number of ints read from the file. So your final loop should go up to countsince that is the number of actual data. So the loop that prints your data should be:

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

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

Or you can walk a pointer:

或者你可以走一个指针:

int *start;

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

Also, I think the file extension should be "txt" rather than "rtf", but that doesn't make a difference.

另外,我认为文件扩展名应该是“txt”而不是“rtf”,但这没有区别。

回答by Ziezi

An RTFfile is not just plain text (it's surrounded by markup) and the character encoding may differ, thus resulting in wrong interpretation of the numbers.

一个RTF文件不只是纯文本(它是由标记包围)和字符编码可能不同,从而导致数字的错误理解。

So, in your reading loop:

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

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

the input stream inputFileby default is skipping white spaces which in your case could be encoded differently, thereby skipped or messed up in some way.

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

Note: Try and add a test linethat prints the read number before you store it in the array.

注意:在将读取的数字存储到数组中之前,尝试添加一个测试行来打印读取的数字。