现在我的功能更好,但它没有返回最小数量,它返回第二大......有人可以帮我吗?我找不到错误。
#include <iostream>
#include <cstdio>
#include <cstdlib>
void add_min(int*& a, int n){
int c;
for(int i = 0; i < n - 1; i++){
if(a[i + 1] < a[i]){
c = a[i + 1];
}
else{
c = a[i];
}
}
std::cout<< c <<std::endl;
for(int s = 0; s < n; s++){
a[s] += c;
}
for(int z = 0;z < n; z++){
std::cout<< a[z] <<std::endl;
}
}
int main(){
int n,i;
std::cout<< "please enter the dimention of the array" <<std::endl;
std::cin>> n;
int *arr = new int[n-1];
std::cout<< "please enter the integers in the array" <<std::endl;
for(i = 0;i < n; i++){
std::cin>>arr[i];
}
add_min(arr, n);
delete [] arr;
return 0;
}
答案 0 :(得分:1)
您正在谈论的这些巨大数字是未定义输出的定义。你为什么得到这个?
在你的循环中,你正在做:
if(a[i + 1] < a[i])
但请记住,C ++中的数组从零开始,所以你在最后一次迭代中越界,因为i + 1
将是n
,并且数组的大小为 n-1 (索引在[0,n-1]范围内运行。)
提示:调试代码可以节省您的时间(和您的生活),使用调试器!
此外,更重要的问题是,您使用的是最初包含垃圾值的未初始化的数组。
答案 1 :(得分:1)
问题1:
int c, a[n];
b = a[n];
a = n的大小,因此您可以最大限度地访问a[n-1]
,而不是a[n]
,因为索引开始from 0
,而不是c
中的1。
问题2:
您是否初始化了数组
a
的值?
在函数中初始化数组时,它们会填充random
个值。
答案 2 :(得分:1)
除了我的评论中提到的问题,问题是您使用的是未初始化的本地数组,这意味着它将包含看似随机的数据。您还可以通过使用b = a[n];
我认为你真正要做的是将完整的数组作为参数传入,而不是在函数中创建new。