无法在C ++中打印存储在数组中的内容

时间:2014-10-15 11:48:42

标签: c++ arrays for-loop cout

我是C ++编程的新手,我在显示数组内容时遇到了一些麻烦。脚本非常简单,用于绘制函数f(x);基本上我通过for循环创建数组(x_vect)之后。我想显示其中的内容而不在循环中进行(这将是作弊)。

// Grafico di una funzione

#include <iostream>
#include <stdio.h> // serve per poter utilizzare PRINTF e SCANF
#include <math.h>

using namespace std;

int main()
{
float x_in, x_fin; // estremi della funzione
float delta_x;     // passo della funzione
int   n;           // numero di passi


// ciclo di controllo sugli estremi dell'intervallo
while (x_fin < x_in) 
{
  cout << endl;
  printf("> Insert extreme values: ");
  scanf("%f" "%f", &x_in, &x_fin); // NB: non va la virgola tra le %f
  cout << endl;
  printf("> number of intervals: ");
  scanf("%d" , &n); // NB: %d se voglio avere un numero intero
    if (x_fin < x_in)
    {
    cout << endl;
    cout << "> Warnign: wrong extreme values (x_fin > x_in)" << endl;
    }
}

delta_x = (x_fin - x_in)/n;
float x_vect[n];
float x = x_in;
x_vect[0]=x;

for (int i=1; i<n; i++)
{
 x = x + delta_x;
 x_vect[i] = x;
}

cout << x_vect << endl; // HERE'S THE PROBLEM !!!!!!!!!!!!!!!!!

// apertura del file per il salvataggio dei dati
FILE *file; // comando necessario per salvataggio di un file
file = fopen("salvataggio_dati.txt", "wt");
fclose(file); 

cout << endl;
return 0;
}

但是脚本不是获取x_vect的内容,而是返回一系列奇怪的字母和数字,如:0x7fff4f6e4ec0

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

由于x_vect是一个数组,因此需要循环以通过执行类似

的操作来获取其值
for(int i=0;i<n;i++)
cout << x_vect[i] << endl;

在您的代码中还有其他一些问题,如几条评论中所述

答案 1 :(得分:0)

idone sample 显示这两种情况。

打印循环:
x_vect是一个数组,并作为指针cout传递给float *

该行:

cout << x_vect << endl;

将指针地址打印到stdout。

要从数组中打印一个值,您需要使用指针语法取消引用指针:

*(x_vect + x)

或使用数组语法:

x_vect[x]

第二种情况在大多数情况下是可取的,但两者都编译为完全相同的操作。

打印一个值(存储在索引x的值)。为了打印所有这些,我们需要一个循环:

for (int i = 0; i < n; i++)
{
    cout << x_vect[i] << endl;
}

然后依次打印每个值。

其他

while循环中,您可以在初始化之前测试您的值。因为它们可能具有任何价值,所以这可能不会一直有效。例如。许多调试器会将初始化变量初始化为0,在这种情况下,您的循环永远不会触发。

这是一个小小的修改来解决这个问题:

do
{
  cout << "\n> Insert extreme values: ");

  cin >> x_in >> x_fin;

  cout << "\n> number of intervals: ");

  cin >> n;


  if (x_fin < x_in)
  {
    cout "\n> Warning: wrong extreme values (x_fin > x_in)" << endl;
  }
} while (x_fin < x_in); 

do {} while();循环将始终一次贯穿循环体。这允许正文设置x_finx_in,以便在首次阅读时具有有效值。

我还使用cincout进行了标准化,因为您不应该真正混合使用I / O.为了简单起见,我没有对输入值进行任何检查,你应该这样做。

idone sample 显示这两种情况。