繁体   English   中英

将文本文件中的数字读取到数组会打印意外值

[英]Reading numbers from a text file to an array prints unexpected values

我正在编写一个程序,将数组打印到文本文件,然后将该数组从该文本文件读取到另一个数组,这是我的程序:

#include <iostream>
#include <fstream>
using namespace std;

void PrintToFile(int arr[], ofstream& PrintFile)
{
    for (int i = 0; i < 10; i++) 
    {
        arr[i] = i;
        PrintFile << arr[i] << " ";
    }
}

void ReadFromFile(int arr[], ifstream& ReadFile)
{
    for (int i = 0; i < 10; i++)
        ReadFile >> arr[i];
}

int main()
{
    int arr1[10];
    int arr2[10];

    ofstream PrintFile("output.txt");
    ifstream ReadFile("output.txt");

    PrintToFile(arr1, PrintFile);
    ReadFromFile(arr2, ReadFile);

    for (int i = 0; i < 10; i++)
        cout << arr1[i] << " ";

    cout << endl;

    for (int i = 0; i < 10; i++)
        cout << arr2[i] << " ";
}

这是程序的 output:

0 1 2 3 4 5 6 7 8 9
-858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460 -858993460

我不明白为什么它会为第二个数组打印出这些数字,它应该与第一个数组相同,有人可以帮我解决这个问题吗? 感谢您的帮助!

您只能打开一个文件一次,因此您的所有读取都会失败,并且该数组会留下不确定的值。

虽然您可以同时打开以进行读取和写入,但更常见的做法是(并且意外情况更少)在写入后关闭,然后才打开以进行读取。

这应该工作:

ofstream PrintFile("output.txt");
PrintToFile(arr1, PrintFile);
PrintFile.close();
ifstream ReadFile("output.txt");
ReadFromFile(arr2, ReadFile);

或者,您可以使用单独的 scope 来界定写入流的生命周期,并使其无法忘记关闭:

{
    ofstream PrintFile("output.txt");
    PrintToFile(arr1, PrintFile);
}
ifstream ReadFile("output.txt");
ReadFromFile(arr2, ReadFile);

只需在 PrintToFile() 之后、ReadFromFile() 的下一个操作之前关闭 PrintFile。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM