2013-12-12 166 views
0

希望你們能幫助。當我嘗試給這個數組添加值時,即1,2,3,4它將打印出十六進制數字?我怎樣才能真正打印數組非hex?謝謝C++陣列打印十六進制?

int main() 
{ 
    int gr1; 
    int gr2; 
    int gr3; 
    int gr4; 
    int addup[4]={gr1, gr2, gr3, gr4}; 
    cout << "Please enter the first grade"; 
    cin >> gr1; 
    cout << "Please enter the second grade"; 
    cin >> gr2; 
    cout << "Please enter the third grade"; 
    cin >> gr3; 
    cout << "Please enter the fourth grade"; 
    cin >> gr4; 

     cout << addup; 

} 

回答

3

您正在將未初始化的變量添加到您的數組。

int main() 
{ 
    int gr1; 
    int gr2; 
    int gr3; 
    int gr4; 
    cout << "Please enter the first grade"; 
    cin >> gr1; 
    cout << "Please enter the second grade"; 
    cin >> gr2; 
    cout << "Please enter the third grade"; 
    cin >> gr3; 
    cout << "Please enter the fourth grade"; 
    cin >> gr4; 

    int addup[4]={gr1, gr2, gr3, gr4}; 

    for (int i = 0; i < 4; i++) 
     cout << addup[i]; 

} 
+1

仍然會顯示「addup」的內存地址而不是值。 – Constantin

+0

我試過這個,因爲我認爲它會解決它。移動數組沒有任何區別!感謝您的參與 – MrTurvey

+0

糟糕!編輯。謝謝 –

3

cout << addup打印內存地址,你需要一個for循環,打印出的值:

for(int i : addup) 
    cout << i << endl; 
1

你不能只是格式的數組:沒有重載輸出操作符。您可以打印它像這樣,雖然:

std::copy(std::begin(addup), std::end(addup), 
      std::ostream_iterator<int>(std::cout, " ")); 

(假設你使用C++ 11和包括<iterator><algorithm>)。請注意,即使您打印該值,它們也不會成爲您期望的值:數組在使用此時變量值進行定義的位置進行初始化。僅僅因爲你稍後改變這些變量並不意味着它會影響數組:這些值是根據定義被複制的,而不是被引用的。

請注意,您應檢查您是否還應該驗證您確實成功讀取值,例如,使用

if (std::cin >> gr1 >> gr2 >> gr3 >> gr4) { 
    // do something with the input 
} 

,不檢查你可以輕鬆地處理隨機數據:您應該始終驗證輸入竟是成功的。

2

作爲變量GR1,GR2,GR3,GR4未初始化

int gr1; 
int gr2; 
int gr3; 
int gr4; 

陣列addup有未定義的值。

int addup[4]={gr1, gr2, gr3, gr4}; 

你應該先賦值給變量後,才定義數組

int gr1; 
int gr2; 
int gr3; 
int gr4; 

cout << "Please enter the first grade"; 
cin >> gr1; 
cout << "Please enter the second grade"; 
cin >> gr2; 
cout << "Please enter the third grade"; 
cin >> gr3; 
cout << "Please enter the fourth grade"; 
cin >> gr4; 

int addup[4]={gr1, gr2, gr3, gr4}; 

至於這種說法

cout << addup; 

那麼它顯示的第一個元素的地址的陣列。要顯示陣列本身,請使用以下構造

for (int x : addup) cout << x << ' '; 
cout << endl;