Программа на C++ автоматически округляет двойные значения, кроме первого значения в массиве

Я использую этот код для перегрузки функций с использованием C++ для сортировки двойного и целочисленного массива.

 #include<iostream>
#include<bits/stdc++.h>
using namespace std;

void sort(int arr[],int n)
{
    int i,j,key;
    for(j=1;j<n;j++)
    {
        key=arr[j];
        i=j-1;
        while((i>=0)&&(arr[i]>key))
        {
            arr[i+1]=arr[i];
            i--;
        }
        arr[i+1]=key;
    }
    cout<<"Sorted integer array is \n";
    for(i=0;i<n;i++)
    {
        cout<<arr[i]<<endl;
    }
}

void sort(double arr[],int n)
{

    int i,j,key;
    for(j=1;j<n;j++)
    {
        key=arr[j];
        i=j-1;
        while((i>=0)&&(arr[i]>key))
        {
            arr[i+1]=arr[i];
            i--;
        }
        arr[i+1]=key;
    }
    cout<<"Sorted double array is \n";
    for(i=0;i<n;i++)
    {
        cout<<arr[i]<<endl;
    }
}

int main()
{
    int n;
    cout<<"Enter the size of the array \n";
    cin>>n;
    cout<<"Enter the values for the integer function \n";
    int a[n];
    int i;
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    double b[n];
    cout<<"Enter the values for the double array \n";
    for(i=0;i<n;i++)
    {
        cin>>b[i];
    }
    sort(a,n);
    sort(b,n);
}

В ответе округляются значения двойных значений, кроме первой записи в массиве double. Есть ли какой-либо шаг приведения типа, который я пропускаю, или какой-либо другой недостаток в коде?

1 ответ

Решение

Вы безвозвратно отсекаете плавающую часть double если вы сохраните его в int переменная.

int key;
key=arr[j];

Вот почему вы получаете неправильные результаты.

декларировать key как double и это работает.


Также VLAs (массивы переменной длины) не являются стандартными C++,

Вот еще несколько вариантов

  • std::array
  • std::vector
  • использование new & delete
Другие вопросы по тегам