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

Unable to print the content stored in an array in C++

本文关键字:数组 格式 C++ 打印 存储      更新时间:2023-10-16

我是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

知道吗?提前谢谢。

由于 x_vect 是一个数组,您需要通过执行类似操作来循环以获取其值

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

正如几条评论中提到的,您的代码中还有其他几个问题

idone 示例显示了这两个实际操作。

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

该行:

cout << x_vect << endl;

正在打印指向标准输出的指针地址。

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

*(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 示例显示了这两种方法的实际效果。