Новое на C++ и обучение. Эта программа вернет правильный результат. Я изменил прототип функции на void, чтобы изолировать и убедиться, что функция обеспечивает правильный вывод.Значение C++ double изменяется при возврате
#include <iostream>
#include <fstream>
void ArraySortToMedian(int x[], int numElem);
using namespace std;
int main()
{
ifstream infile;
infile.open("numbers.txt");
const int SIZE = 6;
int array[SIZE];
int i;
if(!infile)
{
cout << "couldn't find 'numbers.txt'";
return 1;
}
while(i < SIZE && infile >> array[i])
i++;
infile.close();
for(i = 0; i < SIZE; i++)
cout << array[i] << "\n";
ArraySortToMedian(array, SIZE);
return 0;
}
void ArraySortToMedian(int x[], int numElem)
{
bool swap;
int temp, i;
double m;
do
{
swap = false;
for(i = 0;i < (numElem - 1); i++)
{
if(x[i] > x[i + 1])
{
temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
swap = true;
}
}
}
while (swap);
cout << "\n";
for(i = 0; i < numElem; i++)
cout << x[i] << "\n";
m = (x[numElem/2] + x[numElem/2]-1)/(double)2;
cout << "\n" << m;
}
Выход:
6
5
3
1
2
4
1
2
3
4
5
6
3.5
Когда я удалить пустоты и заменить его дважды, чтобы вернуться к основной() среднее значение, как это.
#include <iostream>
#include <fstream>
double ArraySortToMedian(int x[], int numElem);
using namespace std;
int main()
{
ifstream infile;
infile.open("numbers.txt");
const int SIZE = 6;
int array[SIZE];
int i;
double median;
if(!infile)
{
cout << "couldn't find 'numbers.txt'";
return 1;
}
while(i < SIZE && infile >> array[i])
i++;
infile.close();
for(i = 0; i < SIZE; i++)
cout << array[i] << "\n";
median=ArraySortToMedian(array, SIZE);
cout<< "\n" << median << "\n";
return 0;
}
double ArraySortToMedian(int x[], int numElem)
{
bool swap;
int temp, i;
double m;
do
{
swap = false;
for(i = 0;i < (numElem - 1); i++)
{
if(x[i] > x[i + 1])
{
temp = x[i];
x[i] = x[i + 1];
x[i + 1] = temp;
swap = true;
}
}
}
while (swap);
cout << "\n";
for(i = 0; i < numElem; i++)
cout << x[i] << "\n";
m = (x[numElem/2] + x[numElem/2]-1)/(double)2;
return(m);
}
Искаженные Выход:
1
6
5
3
1
2
1
1
2
3
5
6
2.5
При возврате его перемещения элементов массива, которые генерируются в главной(), когда перед тем, когда я просто выводимый из ArraySortToMedian(). Я предполагаю, что это связано с тем, что я ссылаюсь на начальный адрес первого элемента массива. Наверное, очень простой, но с моим ограниченным опытом я в затруднении с этим поведением. Любая помощь, чтобы я могла узнать, что я делаю неправильно, будет оценена по достоинству. Спасибо.
Это было. Я не инициализировал значение перед циклом while. Из любопытства, почему он правильно работал до и после, когда значение было возвращено из-за инициализации? – mrbw
@mrbw Неопределенное поведение не определено. Может произойти все, что угодно. Включая программу, которая работает. – Barry
А так его просто компилятор делает свое собственное волшебство. Я обязательно проверю все инициализации с этого момента и не буду считать их автоматически 0 как int. Спасибо. – mrbw