当使用我在一个函数、另一个函数中修改的数组时,在我的输出中得到一个奇怪的负数
Getting a weird negative number in my output when using an array I modified in one function, in another function
>我正在编写一个程序,该程序采用最多 25 个整数的用户输入列表,然后使用气泡排序打印排序列表,降序打印排序列表,以及有关列表的其他一些信息,如中位数、最小值和最大值以及模式。
我已经在使用初始值设定项列表(而不是来自用户输入/cin(创建的数组上单独测试了程序中的所有函数,它们工作正常,但是当我运行程序时,有些东西是关闭的。例如,当我输入 1,2,3,4 时,按降序打印排序列表的函数打印 3,2,1, -858993460。它总是省略最大的整数,并在最后添加 -858993460,无论我在输入数组中输入什么值。这是我代码的相关部分:
#include <iostream>
using namespace std;
void input(int ulist[26], int& n);
void Bubblesort(int ulist[26], int slist[26], int n);
void print(int list[26], int n);
int n;
void reversesort(int slist[26], int n);
void main()
{
int ulist[26], slist[26];
input(ulist, n);
cout << "Unsorted";
print(ulist, n);
cout << "Sorted";
Bubblesort(ulist, slist, n);
print(slist, n);
reversesort(slist, n);
cin >> n;
}
void input(int ulist[26], int& n)
{
int i(0), value;
cout << "enter value : n";
cin >> value;
while (i < 25 && value != -999)
{
ulist[i] = value;
i++;
if (i < 25)
{
cin >> value;
}
}
n = i;
}
void Bubblesort(int ulist[26], int slist[26], int n)
{
int i, j, temp;
for (i = 0; i < n; i++)
slist[i] = ulist[i];
for (j = 25 - 1; j > 0; j--) //25 is Length of the array
for (i = 0; i < j; i++)
if (slist[i] > slist[i + 1])
{
temp = slist[i];
slist[i] = slist[i + 1];
slist[i + 1] = temp;
}
}
void print(int list[26], int n)
{
int i;
cout << " list of numbers are : n";
for (i = 0; i < n; ++i)
{
cout << list[i] << 'n';
}
cout << "nn";
}
void reversesort(int slist[26], int n) //checked w online compiler, works
{
cout << "List of numbers in descending order is: n";
for (int i = n - 1; i >= 0; --i)
cout << slist[i] << ", ";
cout << "n";
}
我假设这是某种内存问题,其来源与通过我编写的函数在 bubblesort 函数中修改的 slist 传递有关。我对C++很陌生(来自 python(,所以我假设就将数组传递给函数而言我缺少一些东西。
编辑:我想总结一切 - 我怎样才能获取输入函数中输入的数据并在另一个函数中使用该数组?我怎样才能获取由 bubblesort 函数排序的数组并在另一个函数中使用该数组?
代码中未定义行为的第一个实例是
if (slist[i] > slist[i + 1])
在Bubblesort
.
由于
for (j = 25 - 1; j > 0; j--)
for (i = 0; i < j; i++)
此循环访问的最大索引为slist[24]
(其中i < j
和j = 25 - 1 = 24
i + 1
中的 24 个,因此i = 23
(。
您的输入只有 4 个数字,因此仅初始化slist[0]
到slist[3]
。其余元素(slist[4]
到slist[25]
(是未初始化的。从未初始化的变量读取具有未定义的行为。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何仅为一个函数添加延迟
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 我需要将多个函数组合为一个函数
- 在C++中声明一个函数时,它需要有函数本身的参数吗
- 如何创建一个函数来计算并返回平均值、最大值和最小值
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 将 N-arg 函数包装到另一个函数中
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- C++从另一个函数退出函数
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- 视觉我希望一个函数在另一个函数C++中进行计算
- C ++如何在原始抽象类中创建一个函数,该函数接受派生类的输入
- 在另一个函数 (c++) 中调用变量
- 如何在另一个函数中使用返回值作为参数?
- 如何包装一个函数以适应另一个函数的所需类型
- 创建一个函数的 Python 绑定,返回指向带有 boost 的向量的指针