Программа на 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
и это работает.
Также VLA
s (массивы переменной длины) не являются стандартными C++
,
Вот еще несколько вариантов
std::array
std::vector
- использование
new
&delete