プロが教えるわが家の防犯対策術!

Q1)下記のC++から描画をしようとしますが、Gnuplotの画面は開きますが、
肝心のグラフの描画が出来ません。
つまり、描画のコマンドが受け付けられない様です
コメント頂けますと、たいへん有難いです。
注)添付ファイルの最後に
Terminal type is now 'qt' の表示があります。

=================
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define GNUPLOT_PATH "C:/PROGRA~1/gnuplot/bin/wgnuplot.exe" // gnuplot.exeのある場所
// \ではなく、/を使いましょう。
// Program FilesはPROGRA~1、Program Files(x86)はPROGRA~2に置き換えましょう

int main()
{
FILE* gp; // For gnuplot
// gnuplotの起動コマンド
if ((gp = _popen(GNUPLOT_PATH, "w")) == NULL) { // gnuplotをパイプで起動
fprintf(stderr, "ファイルが見つかりません %s.", GNUPLOT_PATH);
exit(EXIT_FAILURE);
}
// --- gnuplotにコマンドを送る --- //
fprintf(gp, "set xrange [-10:10]\n"); // 範囲の指定(省略可)
fprintf(gp, "set yrange [-1:1]\n");
fprintf(gp, "plot sin(x)\n"); //sin(x)を描く

fprintf(gp, "plot sin(x)\n");
fflush(gp); // バッファに格納されているデータを吐き出す(必須)
//system("pause");
fprintf(gp, "exit\n"); // gnuplotの終了
_pclose(gp);
}
============
以上、宜しくお願いします。

「VS2019のコンソールC++からGnu」の質問画像

A 回答 (5件)

あの 1文字のせいかなぁw....



GCC なら popen/pclose, _popen/_pclose のどっちもいけるみたいっす>#4.
    • good
    • 0

あ〜、このページでしょ?



[Windows] C言語でgnuplotを動かす:
https://www.eng.kagawa-u.ac.jp/~haruna/memo/gnup …

このページ、古いんじゃないかなぁ・・・・・・。

Linuxだとこれで一応成功するんですが。

/* ここから */

#include <stdio.h>
#include <stdlib.h>
#define GNUPLOT_PATH "gnuplot -persistent" // gnuplot.exeのある場所
// \ではなく、/を使いましょう。
// Program FilesはPROGRA~1、Program Files(x86)はPROGRA~2に置き換えましょう


int main(void)
{
  FILE *gp; // For gnuplot

  // gnuplotの起動コマンド
  if ((gp = popen(GNUPLOT_PATH, "w")) == NULL) {  // gnuplotをパイプで起動
    fprintf(stderr, "ファイルが見つかりません %s.", GNUPLOT_PATH);
    exit(EXIT_FAILURE);
  }

  // --- gnuplotにコマンドを送る --- //
  fprintf(gp, "set xrange [-10:10]\n" // 範囲の指定(省略可)
       "set yrange [-1:1]\n"
       "plot sin(x)\n");  //sin(x)を描く

  fflush(gp); // バッファに格納されているデータを吐き出す(必須)
  // system("pause");
  fprintf(gp, "exit\n"); // gnuplotの終了
  pclose(gp);
  exit(EXIT_SUCCESS);
}

/* ここまで */

Windows用に書き換えて確かめてみてください。

WIndows用に書き換えるTips:

1. UNIX/Linux/Macはgnuplot等のソフトをインストールするとパスが大体通るようになってるんで、パス設定が必要ないケースが多いが、Windowsならパス設定が必要だろう。
2. gnuplotは-persistentオプションを設定した方が良い(じゃないと開いてすぐ閉じる、とかになる)。
3. popen/pcloseはWindowsの処理系だと何故か_popen/_pcloseになっている。
「VS2019のコンソールC++からGnu」の回答画像4
    • good
    • 0

Re:No.2


>> C++は完全にうごうて、コマンドの送出もおこなっています。
Gnuplotがパイプからのコマンドを受け付けないようですね。残念!
Gnuplot自体にファイルからコマンドを読み取る機能はありませんか?
有っても良さげですが。。。
    • good
    • 0
この回答へのお礼

Linuxではパイプの機能があるようですが、Windowsでは
無いようです。
gnuplotを立ち上げることは可能ですが、コマンドは受け付けない様です。
問題なのは、Gnuplotの使用方法のサイトの説明に、
WindowsかLinuxの記述が無いことです。
趣味や勉強にはLinuxは良いようですが、デスクトップの
AppでLinuxを使用したものは無いようです。
有償ソフトは全てWindowsの様です。
Linuxの画面はWindowsに比べて、醜いですね?
以上、回答有難う御座いました。

お礼日時:2021/06/06 14:18

1."wgnuplot.exe"はパイプを通して操作可能なプログラムなのですか?(私は知らないので、確認のために聞いています。

)
2.C++のプログラムはどこまで動いたか確認されましたか?
確認できていないのであれば、確認できるようなコードをC++プログラムに追加してみてはどうでしょうか?
    • good
    • 0
この回答へのお礼

C++は完全にうごうて、コマンドの送出もおこなっています。

お礼日時:2021/06/06 13:20

> つまり、描画のコマンドが受け付けられない様です



それは、貴方のプログラムが悪いんじゃなくって、単純にGNU PLOTの引数がコマンドラインとして描画コマンドを受け付ける仕様になっていないだけ、だと思います。

原則的に、GNU PLOTの描画コマンドを記述したテンポラリファイルを作成して、そのファイル名をGNU PLOTの引数に渡して、描画が終わった後、テンポラリファイルを削除するようにすれば良いだけだと思いますよ。
    • good
    • 0
この回答へのお礼

お世話になります。
下記のコマンドに対応するンポラリファイルに
ついて、お教え頂けますと大変有難いです。
fprintf(gp, "plot sin(x)\n");

お礼日時:2021/06/06 13:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!