ユーザーから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;
}
問題:
しかし、私が得るのは、txtファイルの「342142464」のような乱数だけです。
ofs << arr[i] << std::endl;
これは、ファイルに書き込んでいる唯一のものであり、i
ここの値はn
(前のループを終了した後)であるため、UB(未定義の動作)でもあります。
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;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加