2013-12-12 4 views
0

надеюсь, что вы, ребята, можете помочь. Когда я пытаюсь добавить значения к этому массиву, то есть 1,2,3,4, он будет распечатываться как шестнадцатеричный номер? Как я могу напечатать массив без шестнадцатеричного? ThanksC++ Массивная печать hex?

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(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; 

затем отображает адрес первого элемента массива. Для отображения самого массива используйте следующую конструкцию:

Смежные вопросы