Чтение произвольных чисел из файла и пузырьковая сортировка их

Я пытаюсь написать программу, которая считывает числа из текстового файла ( 21 12 44 21 -5 63 0) в массив и сортирует их по убыванию, и выводит только положительные числа. Я пытался некоторое время, но отображается не то, что я ожидаю.

содержимое текстового файла:

21 12 44 21 -5 63 0

полный код:

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <conio.h>

using namespace std;
class bubble
{
public:

unsigned* arr;
int n;

//Constructor
bubble(const int& size) : n(size) { this->arr = new unsigned[n]; }



//function to read from file
void inputvf(istream &f)
{
    //check if file is open

    if (f.fail()) {
        cout << "\n Error in openning file!!!";
        exit(1);
    }
    for (int i = 0; i < n; i++)

        f >> arr[i];
        delete[] arr;
    //close file
    //f.close();
}



//Bubble sort function
void bubblesort()
{
    for (int i = 1; i<n; i++)//for n-1 passes
    {

        for (int j = 0; j<n - 1; j++)
        {
            if (arr[j] < arr[j + 1])
            {
                int temp;
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
void display()
{
    cout << endl;
    cout << "----------------------\n";
    cout << "Sorted array elements \n";
    cout << "----------------------\n";
    if (arr >= 0){
        for (int j = 0; j < n; j++)
            cout << arr[j] << endl;
    }
}
};


int _tmain(int argc, _TCHAR* argv[])
{
bubble list(7);
ifstream file("Text.txt");
list.inputvf(file);
list.bubblesort();
list.display();

_getch();
return 0;

Результаты после запуска кода:

4277075694
1
4261281277
2880154539
2880154539
4277075694
0

Что я делаю неправильно??? пожалуйста помоги

это новый код (ниже):

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <conio.h>

using namespace std;
class bubble
{
public:
//Array of integers to hold values
int* arr;

//Number of elements in array 
int n;

//Constructor
bubble(const int& size) : n(size) { this->arr = new int[n]; }



//function to read from file
void inputvf(istream &f)
{
    //check if file is open

    if (f.fail()) {
        cout << "\n Error in openning file!!!";
        exit(1);
    }
    for (int i = 0; i < n; i++)

        f >> arr[i];
        //delete[] arr;
    //close file
    //f.close();
}



//Bubble sort function
void bubblesort()
{
    for (int i = 1; i<n; i++)//for n-1 passes
    {
        for (int j = 0; j<n - 1; j++)
        {
            if (arr[j] < arr[j + 1])
            {
                int temp;
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
void display()
{
    cout << endl;
    cout << "----------------------\n";
    cout << "Sorted array elements \n";
    cout << "----------------------\n";
    if (arr >= 0){
        for (int j = 0; j < n; j++)
            cout << arr[j] << endl;
    }
}
};


int _tmain(int argc, _TCHAR* argv[])
{
bubble list(7);
ifstream file("Text.txt");
list.inputvf(file);
list.bubblesort();
list.display();

_getch();
return 0;
}

1 ответ

Две проблемы:

В inputvf:

delete[] arr;

Вы не должны удалять массив в этот момент - вы еще даже не начали его использовать.

Эта декларация:

unsigned* arr;

означает, что весь ваш вклад unsigned, что означает, что -1 читается как 4294967291 и, таким образом, будет рассматриваться как большое число. Измените ваш массив на обычный int, а затем используйте тест if, чтобы игнорировать отрицательные числа при выводе.

Другие вопросы по тегам