如何使用动态数组从数据文件输出最低和最高值?

问题描述

我无法输出txt文件中包含的整数的最小值和最大值。

我的指导是建立一个动态数组以容纳数组中确切数量的值,然后将文件中的值读入数组。

将值放入数组后,请使用冒泡排序对其进行排序。然后输出数组中的最低和最高值。

================================================ ===========

很遗憾,我不允许使用向量。 :(


这是我编写的代码,感谢您的帮助!

#include <iostream>
#include <fstream>
using namespace std;

void bubbleSort(int[],int);
void printArray(int[],int);

int main()
{
    // open the file
    ifstream file;
    file.open("4253512.txt");

    // program reads file and counts how many numbers in array.
    cout << "Reading from the file..." << endl;
    float i;
    int nElements = 0;
    while (file >> i) // checks whether it's good or not
    {
        nElements++;
    }
    cout << "The amount of numbers in the file are: " << nElements << endl;

    //put numbers into dynamic array

    int *arr = new int[nElements];
    for (i = 0; i < nElements; i++)
    {
        file >> arr[nElements];
    }

    // bubble sort the numbers

    bubbleSort(arr,nElements);

    // printing out the highest and lowest values

    printArray(arr,nElements);

    delete[] arr;
    file.close();

    return 0;
}

void bubbleSort(int arr[],int n)
{
    for(int j = 0; j < n; j++)
    {
        for(int i = j + 1; i < n; i++)
        {
            if(arr[j] > arr[i]) // swap if bigger
               swap(arr[j],arr[i]);
        }
    }
}


void printArray(int arr[],int n)
{
    cout << "The lowest value of the array is " << arr[0] <<
            " and the highest value is " << arr[n] << endl;
}

构建和运行btw时没有运行时错误

解决方法

代码很少出现问题。 不会进入文件流的开头,而是使用nElements而不是i将值传递给数组,并访问arr [n]而不是n-1。

#include <iostream>
#include <fstream>
using namespace std;

void bubbleSort(int[],int);
void printArray(int[],int);

int main()
{
    // open the file
    ifstream file;
    file.open("4253512.txt");

    // program reads file and counts how many numbers in array.
    cout << "Reading from the file..." << endl;
    float i;
    int nElements = 0;
    while (file >> i) // checks whether it's good or not
    {
        nElements++;
    }
    cout << "The amount of numbers in the file are: " << nElements << endl;

    //seek to beginning of file stream
    file.clear();
    file.seekg(0);
    //put numbers into dynamic array
    int* arr = new int[nElements];
    for (i = 0; i < nElements; i++)
    {
        //pass to i not nElements
        file >> arr[(int)i];
    }

    // bubble sort the numbers
    bubbleSort(arr,nElements);

    // printing out the highest and lowest values

    printArray(arr,nElements);

    delete[] arr;
    file.close();

    return 0;
}

void bubbleSort(int arr[],int n)
{
    for (int j = 0; j < n; j++)
    {
        for (int i = j + 1; i < n; i++)
        {
            if (arr[j] > arr[i]) // swap if bigger
                swap(arr[j],arr[i]);
        }
    }
}


void printArray(int arr[],int n)
{
    cout << "The lowest value of the array is " << arr[0] <<
        //                                  n-1 not n
        " and the highest value is " << arr[n-1] << endl;
}