【问题标题】:Unable to print the content stored in an array in C++无法打印存储在 C++ 中的数组中的内容
【发布时间】:2014-10-15 11:48:42
【问题描述】:

我是 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所指的),如果你想打印你需要循环的数组的内容
  • 为什么在引用调用时期望得到内容?
  • 您的代码看起来像 cout 行中的 C 代码部分。在 C++ 中有比 scanf 更好/更安全的选项
  • 声明时您不会初始化x_inx_fin,然后比较它们(注意:初始值未定义)。您还可以使用float x_vect[n];。当 n 不是常量表达式时,这目前不是标准 C++ 的一部分(这在 C 中受支持并作为 GCC 扩展)。
  • 至于您的“问”问题,您需要遍历数组以打印各个答案。实际上,您是在告诉代码打印数组开始的地址。您可能还可以考虑std::vector

标签: c++ arrays for-loop cout


【解决方案1】:

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

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

您的代码中还有其他几个问题,如几个 cmets 中所述

【讨论】:

  • 感谢重播....我的代码中有几个问题并没有真正困扰我,因为这是我第一次使用 c++,我的目标不是成为一名专业程序员;克服它
【解决方案2】:

idone sample 展示了这两个操作。

打印循环:
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 sample 展示了这两个操作。

【讨论】:

  • @FedericoGentile 你不接受我的回答有什么原因吗?
猜你喜欢
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
相关资源
最近更新 更多