2012-06-15 52 views
1

我是C++的新手,嘗試做兩個簡單的函數,但出錯了。有2個函數的簡單程序不起作用

我努力做到以下幾點:

1.Function for input some data. 
2.Function to show what data is input. 

我只是想簡單。我寫到目前爲止的代碼是:

#include <iostream> 
void masiv() 
{ 
    int x[10]; 
    int n, i; 
    int min; 
    int max=0, imax=0, imin; 

    cout << "Enter the number of elements: "; 
    cin >> n; 

    for(i=0; i < n; i++) 
    { 
     cout << "Input value for x["<<i<<"]="; 
     cin >> x[i]; 

    if (min > x[i]) 
    { 
     min = x [i]; 
     imin = i; 
    } 

    if (max < x[i]) 
    { 
    max = x[i]; 
    imax = i; 
    } 
} 
void rezult() 
{ 
    cout << "the smallest value on is xthe biggest value on is x["<<imin<<"]=" << min <<endl; 
    cout << "nai golqmata stoinost e na x["<<imax<<"]=" << max <<endl; 
} 
void main() 
{ 
    masiv(); 
    rezult(); 
} 

我有一堆的錯誤。我知道這是糟糕的代碼,但正如我所說,我剛剛開始。 謝謝

P.對不起,我的英語

編輯:使用此代碼。

#include <iostream> 
using namespace std; 

void masiv(int& min, int&max) 
{ 
int x[10]; 
int n; 
int i; 
int imin, imax; 
cout << "Enter the number of elements: "; 
cin >> n; 
for(i=0; i < n; i++) 
{ 
    cout << "Input value for x["<<i<<"]="; 
    cin >> x[i]; 
    if(min > x[i]) 
    { 
    min = x [i]; 
    imin = i; 
    } 
    if(max < x[i]) 
    { 
    max = x[i]; 
    imax = i; 
    } 
} 
} 

void rezult(int min, int max) 
{ 
cout << "the smallest value on is x= " << min << endl; 
cout << "the biggest value on is x= " << max << endl; 
system ("pause"); 
} 

int main(int argc, char** argv) 
{ 
int min = 999999; 
int max = -999999; 
masiv(min,max); 
rezult(min,max); 
return 0; 
} 
+0

1.你沒有初始化'min'。 2.'rezult'不會知道你在另一個函數內創建的變量,除非你傳入它們。3.不要使用'void main'。使用'int main'。 4.如果他們輸入的元素數量大於10,那該怎麼辦?一個矢量很適合那裏。 – chris

+0

在操作變量之前,您需要研究變量的範圍。 –

回答

6

min變量永遠不會被初始化,它應該被初始化爲一個很大的值。

你聲明一個數組int x[10];但後來你讓用戶輸入值的數量cin>>n而不檢查它是否大於10或負數。這可能會導致問題。

最大值和最小值僅在函數masiv()中聲明,它們不能在函數之外到達。如果你想使他們可以訪問你可以爲他們的實例傳遞給函數,而不是將它們聲明在函數內部的:

void masiv(int& min, int&max) // pass by reference 
{...} 

void rezult(int min, int max) 
{...} 

int main(int argc, char** argv) // proper main prototype 
{ 
    int min = 999999; 
    int max = -999999; 
    masiv(min,max); 
    rezult(min,max); 
    return 0; 
} 

編輯:添加使用命名空間std;在文件開始處

#include <iostream> 
using namespace std; 
+2

我想用'INT_MAX'或'std :: numeric_limits'超過999999.這是一個很好的習慣。 – chris

+1

@chris'std :: numeric_limits ' - 提問者可能對模板的瞭解不足以推斷出'' – moshbear

+1

的增加是的,我還不知道模板。我認爲這個問題是全局和局部變量的問題。 @Anders現在一切都讓人感覺到。感謝您的回覆和其他人。我會接受你的答案,並會努力做到這一點。 –

-3

首先,所有的變量都在massiv()函數中進行了局部定義,使全局第一。

+2

請讓他們成爲全球並不是解決方案。要使用這裏的代碼,首先使用'min','max','imin'和'imax'作爲引用的函數,第二個函數將它們作爲值。然後在'main'中創建這4個。然而,真正的問題在於函數做了多個函數的工作。它應該分裂。 – chris

+0

@chris:問這個問題的人是一個新手,會逐漸理解概念。別緊張。 –

+0

但它會工作,如果我們使其全球化,沒有傷害 – dpanshu

2

最起碼,你有資格的命名空間coutcinendl,所有這一切都是在命名空間std

至於與本地範圍變量的問題,我會改變的masiv簽名返回包含最小值和最大值的std::pair<int,int>

typedef std::pair<int,int> MinMax; 

MinMax massiv() { .... } 

爲什麼也不通minmax參照?因爲你依賴於傳遞的引用的值。你將不得不檢查它們是否合理等等。從函數本身返回最小值和最大值可以完全控制函數。

-3

愛民分鐘IMAX最大應該使全球的功能rezult()來訪問它們。

+0

沒有理由讓這些成爲全球。 – GManNickG

2

您需要在這裏考慮數據流。

您的主函數執行兩個函數,但數據如何脫離massiv函數或結果函數?

您可以使用全局變量,或者你可以有你的主要結構更像是:在X

void main() 
{ 
    int x[10]; 
    massiv(x); 
    rezult(x); 
} 

的rezult功能應處理結果,並填充最小和最大變量。將if語句從massiv移到rezult。

+0

'rezult'真的嗎?當然,猛擊也不會混淆這個詞,它甚至沒有用'z'的聲音說出來 – thecoshman

+0

它明知'rezult'而不是'結果' –