Экспорт массива в текстовый файл - PullRequest
4 голосов
/ 02 апреля 2020

У меня есть код, который получает 3 числа от пользователя, затем сортирует их и распечатывает отсортированный массив. Я пытаюсь экспортировать отсортированные числа в файл .txt, но все, что я получаю, это какое-то случайное число, например «342142464» в файле txt. Я не понимаю, что я делаю неправильно.

Любая помощь будет принята с благодарностью.

#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;
}

1 Ответ

3 голосов
/ 02 апреля 2020

Проблема:

, но все, что я получаю, это какое-то случайное число, например "342142464" в текстовом файле.

ofs << arr[i] << std::endl;

Это единственное, что вы пишете в свой файл, который также является UB (неопределенное поведение), поскольку здесь значение i равно n (после выхода из предыдущего l oop).

arr[n] выходит за пределы и может быть любым значением мусора, или ваша программа может даже завершиться.

Решение:

Так же, как вы распечатайте отсортированный массив на консоль, используя cout, сделайте то же самое с ofs:

for (i = 0; i < n; ++i)
    ofs << arr[i] << '\t';
ofs << endl;

Или вы можете сделать это в самом предыдущем l oop:

for (i = 0; i < n; ++i)
{
    cout << arr[i] << '\t';
    ofs << arr[i] << '\t';
}
cout << endl;
ofs << endl;
...