ページ 11

コンパイル~実行について

Posted: 2007年6月08日(金) 23:58
by マサキ
現在Windows上でシグウィンを使いながら、プログラミングを行っています。
そこで、わからないことがあったので質問させていただきます。

まず、ファイル名 file_post に 
3.2 2 + 4 -
という数値が保存されているファイルがあります。
そして、逆ポーランド記法の評価をするプログラムとして、calc_postfix.c というプログラムがあります。
一応、このプログラムは添付させておきます。
本来、このプログラムは標準入力から数値を読み取り、結果を表示させるものです。
しかし、標準入力からではなく、file_postから数値を読み取り、結果を表示させるにはどうすればいいいのでしょう??
私は 
$gcc calc_postfix.c < file_ppost
とし、実行してみたところセグメントエラーになってしましました。
何処が間違っているのかわかりません。
もしわかるかたがいたら、教えてくださると助かります。
宜しくお願いします。

Re:コンパイル~実行について

Posted: 2007年6月09日(土) 00:00
by マサキ
訂正:
$gcc calc_postfix.c < file_ppost を $gcc calc_postfix.c < file_post

余分にpが一つついていました。

Re:コンパイル~実行について

Posted: 2007年6月09日(土) 00:45
by box
> $gcc calc_postfix.c < file_ppost

実行の仕方が正しくないのではないでしょうか?

gccで実行ファイルを作った後、
実行ファイル名 < file_post <Return>
のように実行すればよいのではないかと思います。

ところで、ソースコードの中に気になる点がいくつかあります。
1)isdigit()を使っていますので、ctype.hをインクルードしてください。
2)pop()の戻り値はint型でよいのでしょうか?例としてあげられた計算の結果が正しくないですよね。
3)pop()の中で実行しているfree()は必要でしょうか?
  引数のcは、動的に確保した領域を指すポインタではありません。

Re:コンパイル~実行について

Posted: 2007年6月09日(土) 01:31
by マサキ
たしかにそうですよね^^; まだまだ初心者なので申し訳ありません。
返し値がint型だと、小数点以下が無視されてしまいますからね......
教えてくれてありがとうございました。

ところで、
$gcc calc_postfix.c
$callc_postfix < file_post <Return>
と実行しましたところ
bash:syntax error near unexpected token 'newline'
と出てきてしまいました。
またどこか間違っているのでしょうか??
宜しくお願いいたします。

Re:コンパイル~実行について

Posted: 2007年6月09日(土) 01:41
by box
> $gcc calc_postfix.c
> $callc_postfix < file_post <Return>

実行時のプログラム名でエルが1つ多いのは、
投稿時のちょっとした手違いですか?
それとも、本当にこのようにして実行しましたか?

Re:コンパイル~実行について

Posted: 2007年6月09日(土) 08:34
by Hermit
bash のエラー出力がよくわかりませんが、

gcc calc_postfix.c
としたばあい、実行ファイルは、同じフォルダー中の、a.out.exe になるんじゃなかったっけ?

で実行するには、
./a.out < file_post
でなかったかと・・・
最近 cygwin 使ってないので違ってたらゴメンね。

Re:コンパイル~実行について

Posted: 2007年6月09日(土) 08:52
by box
Hermitさんがお書きになったとおり、
作成する実行ファイル名を明示的に指定していないので、
実行ファイルにはデフォルトの名前が付いているのかもしれないですね。

フォルダの内容を確認してみてください。>マサキさん

Re:コンパイル~実行について

Posted: 2007年6月09日(土) 10:28
by マサキ
>>boxさん
lが一つ多いのは、投稿時の手違いです。紛らわしくて申し訳ないです。

また、
$gcc calc_postfix.c
$./a.out < file_post
とやってもできませんでしたが、
$gcc calc_postfix.c
$./a.exe < file_post
としたら、正しく答えが出力されました。
boxさん、Hermitさん、親切に教えてくれてありがとうございました。