2012-03-11 73 views
-2

好的,這就是交易。我已經在這個問題上工作了幾天,並嘗試了所有可用的資源。就在今天早上,我將最後一封電子郵件發送給我的教授,但我想在等待他的回答時繼續努力。我應該返回一個指針,指向0到1410之間的一個隨機數組中的最小值,然後通過指針算術賦予它們(讓這部分工作得很好)。這個任務包含了一個框架文件,但我喜歡從頭開始構建一些東西(當然使用他的參數)。這裏是我的代碼:返回最小值作爲函數的指針

#include <iostream> 
#include <cstdlib> 
using namespace std; 

int* find_smallest_number(int*, int); 

int main() 

{ 
    const int size = 10; 
    int random_array[size] = {}; 

    int* smallestNumber = find_smallest_number(random_array, size); 

    srand(time(NULL)); 

    for(int i = 0; i < size; i++) 
    { 
     *(random_array + i) = rand()%1410; 
     cout << random_array[i] << endl; 
     cout << &*(random_array + i) << endl; 
    } 

    cout << "The smallest number is " << *smallestNumber << endl; 

    return 0; 
} 


int* find_smallest_number(int *random_array, int size) 

{ 

/*  
    for(int i = 0; i < size; i++) 

    { 
     if(*(random_array + i) > *(random_array + 1)) 
     { 
      return *(random_array + i); 
     } 
     else if(*(random_array + i) < *(random_array + 1)) 
     { 
      return *(random_array+1); 
     } 

    } */ 

    return &min_element; 
} 

我真的不能告訴你我嘗試了多少種不同的方式。這只是最近的一次嘗試(所有事情都以大量的[headdesk]結束)。任何提示或提示,你們可以拿出我來嘗試?我試圖創建另一個變量來保存值/地址,我嘗試了許多不同的比較方式,就像我現在知道的那樣(這個min_element是我在互聯網上發現的東西)。我可以偶爾讓我的代碼編譯,但是當我這樣做時,它只會返回數組中FIRST元素的值/地址(不管我的代碼是什麼樣子)。如果我嘗試返回一個指針,它會生氣,並告訴我「int無效轉換爲int *」請幫助我? (另外,對不起,如果我的代碼的格式是一點點,我試圖按照它的說明,但可能也失敗了:/)

+0

那麼,你到底有什麼問題?顯示錯誤的輸出或錯誤消息。 – Marcin 2012-03-11 16:09:53

+0

在你用數組填充數組之前,你似乎正在調用'find_smallest_number' **。這不會很好結束。此外,你的代碼不會編譯(什麼是'min_element'?)。 – 2012-03-11 16:10:08

回答

1

不要重新發明輪子,使用std::min_element爲:

#include <algorithm> //must include this 

int* minValue = std::min_element(array, array+size); 

此外,請確保您先填充陣列,然後使用std::min_element,如上所示。

看來你需要真的很好的C++入門書。從此列表中獲取一本介紹性書籍。

+0

TBH,我不知道min_element是如何工作的或者它應該如何初始化。我在頭痛的痛苦中掙脫了網絡。 – ImmaD0rk 2012-03-11 16:11:31

+0

@ ImmaD0rk:'min_element'是一個函數,它不應該被初始化。 – Nawaz 2012-03-11 16:13:33

+0

由於這是一次學校練習,我懷疑使用'std'中的任何內容都會對他有幫助。 – 2012-03-11 16:15:03

1

貌似你試圖找到陣列中最小的號碼,你使用隨機值填充它。您需要首先初始化陣列,然後找到最小值。

+0

-___-這就是爲什麼我應該早點這樣做(我喜歡這個網站)。莫阿爾頭盔對我來說,讓我嘗試切換它。 – ImmaD0rk 2012-03-11 16:10:58

+0

Grrr,不!我仍然越來越_really惱人的錯誤「無效的轉換從int到int *」 – ImmaD0rk 2012-03-11 16:13:21

2

那麼,首先,你爲什麼要在填充數組之前調用找到最小數字?它應該是:

srand(time(NULL)); 

for(int i = 0; i < size; i++) 
{ 
    *(random_array + i) = rand()%1410; 
    cout << random_array[i] << endl; 
    cout << &*(random_array + i) << endl; 
} 

//move the call after you populate the array 
int* smallestNumber = find_smallest_number(random_array, size); 

其次,在你的函數代碼應該是這樣的:

int* find_smallest_number(int *random_array, int size) 
{ 
    int* minPtr = random_array; 
    for(int i = 1; i < size; i++) 
    { 
     if (*(random_array + i) < *minPtr) 
      minPtr = random_array + i; 
    } 
    return minPtr; 
} 

這樣一來,你在數組中返回一個指針的確切元素。你的變種:

return &min_element; 

建議你返回一個局部變量,這是未定義行爲的地址。

+0

我會嘗試你的方式....但不幸的是,我有一種感覺,我已經嘗試過這種方式。 :/ Brb。 – ImmaD0rk 2012-03-11 16:15:25

+0

您先生,是網民中的神!非常感謝!!!!!!!!! – ImmaD0rk 2012-03-11 16:18:32