2014-02-16 35 views
0

现在我的功能更好,但它没有返回最小数量,它返回第二大...任何人都可以帮助我吗?我找不到错误。我的功能总是返回一个巨大的数字

#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; 
} 
+6

这是这个程序的问题中最少的。我开始不传递数组并使用未初始化的数组。 – Hasturkun

+0

是的,这个错误比右边多了。 –

+2

从技术上讲,您没有有效的C++程序,因为C++(如C++ 11)没有[可变长度数组](http://en.wikipedia.org/wiki/Variable-length_array)。所以'add_min'中的声明'int a [n]'在技术上不是一个有效的声明。 –

回答

1

这些你在谈论巨大的数字是未定义输出的定义。你为什么得到这个?

在你的循环,你正在做的:

if(a[i + 1] < a[i]) 

但请记住,数组是从零开始在C++,所以你要出界的最后一次迭代,因为i + 1n,阵列大小为n-1(索引运行在[0,n-1]范围内)。

提示:调试代码可以节省您的时间(和您的生活),使用调试器!

此外,更重要的问题是,您正在使用初始包含垃圾值的未初始化的数组。

1

问题1:

int c, a[n]; 
b = a[n]; 

尺寸A = N,因此就可以在最大访问a[n-1],不a[n]因为索引开始from 0,在不c 1。

问题2:

你初始化数组a的价值?

当数组在函数中初始化时,它们被填充random值。

1

除了我在评论中提到的问题,问题是您使用的是未初始化的本地数组,这意味着它将包含看似随机的数据。您也通过读取值出界b = a[n];

开始时我想你真正的意思做了完整的数组作为参数的传递,而不是在功能创造新的。

+0

是的,但因为我必须通过引用调用数组,所以我不能使用int&a [] – JuneWitt

+0

@JuneWitt您仍然可以将该数组作为指针传递,并修改它的内容。 –

+0

非常感谢!它的工作,但有一个新的问题...我编辑它,你能帮助吗? – JuneWitt

相关问题