2

我正在尝试从我的 c++ 程序中实时绘制我的图形。我已经安装了 gnuplot 4.6 并且能够打开 gnuplot.exe 并绘制图形。但是我无法通过管道打开应用程序。这是我使用的代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE* gp;
  char *path = "C:\Program Files\gnuplot\bin\wgnuplot";
#ifdef WIN32
  gp = _popen("gnuplot -persist", "w");
#else
  gp = _popen(path, "w");
#endif

  if (gp == NULL)
    return -1;

  fprintf(gp, "set isosample 100\n");
  fprintf(gp, "min=-1\n");
  fprintf(gp, "max=1\n");
  fprintf(gp, "pi=3.141592\n");
  fprintf(gp, "set hidden3d\n");
  fprintf(gp, "set pm3d\n");
  fprintf(gp, "set contour\n");
  fprintf(gp, "splot [min:max] [min:max] x*x+2*y*y-0.3*cos(3*pi*x)-0.4*cos(4*pi*y)+0.7\n");
  fprintf(gp, "pause -1\n");

  return 0;
}

我已设置环境变量,但出现以下错误。c:program\ 不是内部或外部命令,也不是可运行的程序或批处理文件。

我尝试使用相同的路径运行 exe。但它没有打开。是不是因为cmd提示符中可以给出的字符串的最大长度..

请提出您宝贵的建议。

谢谢

4

3 回答 3

2

反斜杠路径分隔符必须转义(或替换为斜杠):

char *path = "C:\\Program Files\\gnuplot\\bin\\wgnuplot";
于 2012-04-09T02:50:19.420 回答
1

而不是使用 char* 路径,您应该将 _popen 函数编写为

gp = _popen("E:\\myprograms\\ProgramFiles\\libraries\\Gnuplot\\bin\\gnuplot -persist", "w");

并且可能通过这种方式调用对应的数据数据文件

fprintf(gp,"splot \"C:\\\\Users\\\\username\\\\Documents\\\\Visual Studio 2012\\\\Projects\\\\laplace equation\\\\laplace.dat \"\n");

于 2013-01-20T10:02:53.980 回答
0

您可以使用gnuplot-cpp来绘制图表。

这个小片段解决了您的问题(test1.cpp):

#include "gnuplot_i.hpp" 

int main()
{
   Gnuplot gp;
   gp.cmd("set isosample 100\n");
   gp.cmd("min=-1\n");
   gp.cmd("max=1\n");
   gp.cmd("pi=3.141592\n");
   gp.cmd("set hidden3d\n");
   gp.cmd("set pm3d\n");
   gp.cmd("set contour\n");
   gp.cmd("splot [min:max] [min:max] x*x+2*y*y-0.3*cos(3*pi*x)-0.4*cos(4*pi*y)+0.7\n");
   gp.cmd("pause -1\n");


   std::cout << std::endl << "Press ENTER to continue..." << std::endl;
   std::cin.clear();
   std::cin.ignore(std::cin.rdbuf()->in_avail());
   std::cin.get();

   return 0;
}

在 Linux 上编译并执行这个应用程序

g++ test1.cpp && ./a.out

这给 结果

于 2016-05-11T15:05:15.220 回答