Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在屏幕上显示输出?_C++_Arrays - Fatal编程技术网

C++ 如何在屏幕上显示输出?

C++ 如何在屏幕上显示输出?,c++,arrays,C++,Arrays,我正在练习Alex Allain书中的数组和指针 #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; co

我正在练习Alex Allain书中的数组和指针

#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;
}
为什么我缺少p_new_values数组的屏幕输出?是否允许将cout放入函数定义中

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

大小永远不会是下一个元素+1,因此永远不会调用growArray函数。我不确定您想用该检查来表示什么,但您应该重新考虑您的程序逻辑。

只有在使用*growArray函数的情况下,您才尝试打印值,因为打印语句在*growArray函数中

在函数定义中使用cout是非常好的

[edit]和yes如上所述,您不能更改参数next_元素,因此,可能需要重新检查您的逻辑。

请注意,当下一个\u元素仅比当前数组多1时,您的大小将等于下一个\u元素+1,因此当下一个\u元素为size-1时,函数growArray将在程序的特定点调用,依此类推

if ( size == next_element + 1 )
{
    // now all we need to do is implement growArray
    p_values = growArray( p_values, size );
}
此外,变量next_元素将被更新以使条件成为有效逻辑

您可以替换以下行:

p_values[ next_element ] = val;

最终代码:


我明白,但这个例子确实来自于书中。在这种情况下,我建议烧掉这本书。书中的代码是可以的。这个问题是由于不小心复制和没有阅读本书代码中的注释造成的。你确定没有遗漏下一个元素吗?如果你更仔细地阅读本书,你会在代码中看到,行p_值=数组p_值,大小;缺少一个符号&而且您编写的growtarray函数与书中的函数非常不同。即使使用next_element++,我仍然不确定这个示例是关于什么的。Growtarray是否也应该更新大小?@KizaRajak您没有复制的所有内容都是重要的部分。也就是说,请注意,我们需要将大小作为指针传递,因为我们需要在数组增长时跟踪数组的大小!这很重要,这是一个更好的答案
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;
}