2015-08-18 2 views
2

Я занимаюсь массивами и указателями от книги Алекса Аллана.Как показать вывод на экране?

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

int *growArray (int* p_values, int cur_size); 

int main() 
{ 
    int next_element = 0; 
    int size = 10; 
    int *p_values = new int[ size ]; 
    int val; 
    cout << "Please enter a number: "; 
    cin >> val; 
    while (val > 0) 
    { 
    if (size == next_element + 1) 
    { 
     // now all we need to do is implement growArray 
     p_values = growArray(p_values, size); 
    } 
    p_values[ next_element ] = val; 
    cout << "Please enter a number (or 0 to exit): "; 
    cin >> val; 
    } 
} 

int *growArray (int* p_values, int cur_size) 
{ 
    int *p_new_values = new int[ cur_size * 2 ]; 
    for (int i = 0; i < cur_size; ++i) 
    { 
    p_new_values[ i ] = p_values[ i ]; 
    cout << p_new_values[ i ] << endl; 
    } 
    delete p_values; 
    return p_new_values; 
} 

Но когда я выполняю код

Please enter a number: 6 
Please enter a number (or 0 to exit): 0 

Почему я отсутствующий вывод на экран для p_new_values массива? Можно ли положить cout в определение функции или нет?

+0

Вы уверены, не существует 'next_element ++' отсутствует где-то? – dhke

+0

Если вы внимательно прочитаете книгу, вы увидите, что в вашем коде строка 'p_values ​​= growArray (p_values, size);' отсутствует амперсанд («&») и что функция 'growArray', которую вы написали, очень отличается от той, что написана в книге. – molbdnilo

+0

даже с 'next_element ++', я все еще не уверен, что этот пример примерно –

ответ

5
if (size == next_element + 1) 
{ 
    // now all we need to do is implement growArray 
    p_values = growArray(p_values, size); 
} 

size никогда не будет next_element + 1, так что ваша growArray функция никогда не будет вызвана. Я не уверен, что вы хотите выразить с помощью этой проверки, но вы должны пересмотреть логику своей программы.

+0

Я понимаю, но пример действительно из книги. – KizaRajak

+1

В этом случае я предлагаю записать указанную книгу. – TartanLlama

+2

Код в книге в порядке.Проблема вызвана неосторожным копированием и отсутствием комментариев в коде книги. – molbdnilo

1

Вы пытаетесь напечатать значения только в случае использования функции *growArray(), потому что операторы печати находятся внутри функции *growArray().

И совершенно правильно использовать определения функций внутри cout.

[править] и да, как указано выше, вы не изменяете параметр next_element, так что, пожалуйста, перепроверьте свою логику.

2

Пожалуйста, обратите внимание, что ваш size будет равен next_element + 1 когда next_element только 1 больше текущий массив и, следовательно, функция growArray() будет вызываются в определенных точках программы, когда next_element является size-1 и так далее.

if (size == next_element + 1) 
{ 
    // now all we need to do is implement growArray 
    p_values = growArray(p_values, size); 
} 

Кроме того, нигде переменная next_element не получает обновляется сделать условие действительной логики.

Вы можете заменить следующую строку:

p_values[ next_element ] = val; 

с

p_values[ next_element++ ] = val; 

Финальный код:

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

int *growArray (int* p_values, int *cur_size); //Changed 

int main() 
{ 
    int next_element = 0; 
    int size = 10; 
    int *p_values = new int[ size ]; 
    int val; 
    cout << "Please enter a number: "; 
    cin >> val; 
    while (val > 0) 
    { 
    if (size == next_element + 1) 
    { 
     // now all we need to do is implement growArray 
     p_values = growArray(p_values, &size); //Changed 
    } 
    p_values[ next_element++ ] = val; //Changed 
    cout << "Please enter a number (or 0 to exit): "; 
    cin >> val; 
    } 
} 

int *growArray (int* p_values, int *cur_size) //Changed 
{ 
    *cur_size = *cur_size * 2;      //Changed 
    int *p_new_values = new int[ *cur_size];  //Changed 
    for (int i = 0; i < *cur_size; ++i)   //Changed 
    { 
    p_new_values[ i ] = p_values[ i ]; 
    cout << p_new_values[ i ] << endl; 
    } 
    delete p_values; 
    return p_new_values; 
} 
+1

это лучший ответ –

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