Чтение произвольных чисел из файла и пузырьковая сортировка их
Я пытаюсь написать программу, которая считывает числа из текстового файла ( 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, чтобы игнорировать отрицательные числа при выводе.