こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

gnuplotをC言語で操作する方法

C言語を用いてgnuplotを操作しデータファイルから自動的にグラフを作成するプログラムを作ろうとしています。

使用環境はWindows7、VisualStudio2010です。

ほとんどの部分はうまくいったのですが一部分が正しく表示されません。

軸の目盛ラベルの表示フォーマット設定のコマンドで
set format x "%.1f"
として小数点以下一桁を強制的に表示させるためC言語でパイプを用いて

#define GNUPLOT_PATH "C:/gnuplot/binary/pgnuplot.exe"

int plot(char *file_name){
FILE *gp;
gp = _popen(GNUPLOT_PATH, "w");
fprintf(gp, "set title 'TEST PLOT'\n");

(中略)

fprintf(gp, "set format x '%.1f' \n");//この部分が正しく反映されません。

(中略)

fprintf(gp, "plot '%s' using 1:2 with linespoints lt 4 lw 5 pt 6 ps 2.0 lc rgb 'red'\n",file_name);
fprintf(gp,"quit \n");
fflush(gp);
_pclose(gp);
return 0;

}

'%.2f' の部分をいろいろいじってみたのですがうまくいかず、なぜできないのか原因がわかりません。
fprintf()の数値代入の %f と混ざってしまっているのでしょうか?

投稿日時 - 2012-03-14 18:24:53

QNo.7362030

すぐに回答ほしいです

質問者が選んだベストアンサー

fprintf の引数は(FILE*, フォーマット文字列,....) だと言うことをお忘れではないでしょうか?
%.1fはfprintfで解釈されて、dounle型を変換した文字列が出力されます。
そのdouble型の引数が無いんので、なにかその領域にあるものを無理矢理変換したか、領域違反でエラーになったか、です。

そのまま%を送りたいなら、次のようなものが常套手段でしょう。

fprintf(gp, "set format x '%%.1f' \n");
// %を二つ並べて、フォーマット変換を無効にする

fprintf(gp,"%s" "set format x '%.1f' \n");
// フォーマットに%sを指定して、文字列を与える

投稿日時 - 2012-03-14 18:43:36

お礼

ありがとうございました!!
正しく反映されました。

基本がまだ全然できていなかったです・・・

投稿日時 - 2012-03-14 19:29:15

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問