[英]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.