• ベストアンサー

C言語の標準入力について

コマンドプロンプトで program.c < filename と、「 < ファイル名」と入力された時と、そうでない時で分岐したのですがどうすればよいですか? お願いします。

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.6

ちょっとわかりにくかったですかね…。 「標準入力から読み込む」という風に作ってあれば、 標準入力をリダイレクトすることで >「< filename」と付いたときはfilenameからデータを読み込む >何も無い時は、標準入力でユーザーからデータを受け付ける という動作になります。 よって、「リダイレクトだったらファイル名を取得してオープンして~」とかの処理を入れる必要はありません。 OS(シェル)がその辺りのことはよろしく処理してくれます。 # ただし、リダイレクトされている状態から「途中でリダイレクトされていない状態に戻したい」とかいう場合は面倒です。 # < fileで入力をリダイレクトしていて、途中でキーボード(本来の標準入力)からの操作を行いたい。とか…… # クローズして開き直すことで戻せるでしょうが、その後でまたファイルのリダイレクトに戻す。なんてのは……。

その他の回答 (6)

回答No.7

おそらくは、リダイレクトでファイル名を直接指定するのと、(ファイル名を表す)名前を指定するのとを使い分けたいということかなと思います。 まず、リダイレクト自体は、OS(というか、シェル)の管理下にあるので、環境変数を使えば良いのではないかなと思います。 といいつつ、手元には Windows しかないので、Windows だとたとえば、 a.out だと、標準入力から a.out < names.txt だと、names.txt の内容を入力に、 set fileName = names.txt という指定の元で、 a.out < %fileName% だと、fileName にセットされた、names.txt を入力に という動作をします。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.5

入力のリダイレクトなら… >「< filename」と付いたときはfilenameからデータを読み込む >何も無い時は、標準入力でユーザーからデータを受け付ける コード書かなくてもそういう風に動作するハズですが…… わざわざ区別する必要もないと思いますが、なにか不都合でもあるのでしょうか?

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.4

手元に、Cのコンパイラを実行できる環境がないので、取りあえずアドバイスだけですが、 リダイレクトを使うのではなく、コマンドライン引数を使えば、考えておられる様なことが出来ると思います。 参考: http://www9.plala.or.jp/sgwr-t/c/sec11-4.html http://lambda.phys.tohoku.ac.jp/~takahasi/ctext/ArgMain.pdf 要は、実行時にコンソールから渡された引数をチェックして、ファイル名に相当する引数がないか、そのファイルが存在しない(fopenの戻り値がNULLだったら、有効なファイルが存在しないなどでチェックできると思います)ならば、分岐して入力を促す、などの処理を組めばよいと思います。 取り急ぎ、ご参考まで。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ちなみにですが, なぜこれらを区別したいのでしょうか?

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

環境に依存しますが…isatty()ですかねぇ。 コマンドプロンプトと言っているので、Windowsでしょうけど。 # コマンドプロンプトからtelnet.exeを使用してUNIX系端末に繋いでいる可能性も否定できないワケですが。 ただし…… >program.c < filename 「Cのソースファイル」は実行ファイルではありませんからリダイレクトできないと思います。

omkm
質問者

補足

回答ありがとうございます。 UNIX系のOSを想定しています。 あとa.outでした。すみません。 <filenameのfilenameの部分を変数に入れて、それで判定するっていう簡単なことは出来無いんですかね・・・。

  • f272
  • ベストアンサー率46% (8627/18450)
回答No.1

何をやりたいのかがまったくわからないのですが... あなたの意図している結果はどのようなものですか?

omkm
質問者

補足

回答ありがとうございます。 「< filename」と付いたときはfilenameからデータを読み込む 何も無い時は、標準入力でユーザーからデータを受け付ける という感じに分岐したいと思っています。 よろしくおねがいします。

関連するQ&A