将数组导出到 txt 文件
Exporting an array to txt file
我有一个代码可以从用户那里接收 3 个数字,然后对它们进行排序并打印出一个排序后的数组。
我试图将排序后的数字导出到 .txt 文件中,但我得到的只是 txt 文件中的一些随机数,如“342142464”。
我不明白我做错了什么。
任何帮助将不胜感激。
#include <iostream>
#include <fstream>
std::ofstream ofs("sorted_numbers.txt");
using namespace std;
int main()
{
//array declaration
int arr[3];
int n,i,j;
int temp;
//total numbers to read
n = 3;
//read 3 numbers
for(i=0;i<n;i++)
{
cout<<"Enter number ["<<i+1<<"] ";
cin>>arr[i];
}
//print input numbers
cout<<"Unsorted Array numbers:"<<endl;
for(i=0;i<n;i++)
cout<<arr[i]<<"\t";
cout<<endl;
//sorting - ASCENDING ORDER
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[i]>arr[j])
{
temp =arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
//print sorted array numbers
cout<<"Sorted (Ascending Order) Array numbers:"<<endl;
for(i=0;i<n;i++)
cout<<arr[i]<<"\t";
cout<<endl;
ofs << arr[i] << std::endl;
return 0;
}
问题:
but all I get is some random number like "342142464" in the txt file.
ofs << arr[i] << std::endl;
这是你唯一要写入文件的东西,它也是一个 UB(未定义行为),因为这里 i
的值是 n
(从上一个循环退出后) .
arr[n]
超出范围,可以是任何垃圾值,或者您的程序甚至可能终止。
解法:
就像您使用 cout
将排序数组打印到控制台一样,使用 ofs
做同样的事情:
for (i = 0; i < n; ++i)
ofs << arr[i] << '\t';
ofs << endl;
或者您可以在之前的循环中执行此操作:
for (i = 0; i < n; ++i)
{
cout << arr[i] << '\t';
ofs << arr[i] << '\t';
}
cout << endl;
ofs << endl;
我有一个代码可以从用户那里接收 3 个数字,然后对它们进行排序并打印出一个排序后的数组。 我试图将排序后的数字导出到 .txt 文件中,但我得到的只是 txt 文件中的一些随机数,如“342142464”。 我不明白我做错了什么。
任何帮助将不胜感激。
#include <iostream>
#include <fstream>
std::ofstream ofs("sorted_numbers.txt");
using namespace std;
int main()
{
//array declaration
int arr[3];
int n,i,j;
int temp;
//total numbers to read
n = 3;
//read 3 numbers
for(i=0;i<n;i++)
{
cout<<"Enter number ["<<i+1<<"] ";
cin>>arr[i];
}
//print input numbers
cout<<"Unsorted Array numbers:"<<endl;
for(i=0;i<n;i++)
cout<<arr[i]<<"\t";
cout<<endl;
//sorting - ASCENDING ORDER
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[i]>arr[j])
{
temp =arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
//print sorted array numbers
cout<<"Sorted (Ascending Order) Array numbers:"<<endl;
for(i=0;i<n;i++)
cout<<arr[i]<<"\t";
cout<<endl;
ofs << arr[i] << std::endl;
return 0;
}
问题:
but all I get is some random number like "342142464" in the txt file.
ofs << arr[i] << std::endl;
这是你唯一要写入文件的东西,它也是一个 UB(未定义行为),因为这里 i
的值是 n
(从上一个循环退出后) .
arr[n]
超出范围,可以是任何垃圾值,或者您的程序甚至可能终止。
解法:
就像您使用 cout
将排序数组打印到控制台一样,使用 ofs
做同样的事情:
for (i = 0; i < n; ++i)
ofs << arr[i] << '\t';
ofs << endl;
或者您可以在之前的循环中执行此操作:
for (i = 0; i < n; ++i)
{
cout << arr[i] << '\t';
ofs << arr[i] << '\t';
}
cout << endl;
ofs << endl;