簡體   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