• ベストアンサー

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

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

  • omkm
  • お礼率33% (108/325)

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答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% (2177/4070)
回答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% (2177/4070)
回答No.2

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

omkm
質問者

補足

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

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

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

omkm
質問者

補足

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

関連するQ&A

  • C言語でMS-DOSプロンプト入力でプリンタに出力する方法は?

    OS/Win98でVC++を使ってC言語を学習している初心者です. C言語のプログラムでMS-DOSプロンプト上のコマンド入力において プリンタに出力する方法を知りたいです. たとえばMS-DOSプロンプト上で C:>[プログラム名][ファイル名(XXX.txt)] と入力すればプリンターにおいて、入力した[ファイル名(XXX.txt)]が 出力されるようなプログラムを作成したいです. 主にプログラムの流れをどのようにすれば良いか知りたいです. 宜しくお願いします.

  • c言語の実行が分かりません

    C言語のプログラムを実行させる方法が分かりません。 unixでC言語を以下の手順で学習しています。 1 emacs上でファイル名.cというソースファイルを作成。 2 xterm上で gcc ファイル名.c と入力 その後xterm上で後一つコマンドを入力すればいいのですが、そのコマンドを忘れてしまいました。教えていただければ、ありがたいです。

  • C言語の入力方法について

    C言語で以下のようなプログラムをつくるとします。 ・5個の数字を入力し、合計を求める。 その際、コマンドプロンプト上に実行結果が下記のようにでるとします。 例: 1個めの数字を入力してください→ ここで1を入力すると 例: 1個めの数字を入力してください→1 2個めの数字を入力してください→ このようになったときに「やっぱり1個めの数字を変更したい」 となったときに変更する手段はあるのでしょうか?

  • C++ で DIR コマンド

    MS-DOSプロンプトで dir と入力すれば、フォルダ内の 様子がMS-DOSプロンプトに表示されるけど、 C++ で、MS-DOSプロンプトで dir と入力したのと同じ 様にするにはどういうプログラムを作ればいいのですか? 別の言い方で書くと、実行すればMS-DOSプロンプトが 起動し、dir と入力されて dirコマンドが実行される というファイルを作るソースが知りたいんです。 dirコマンドが実行される対象となるディレクトリは どこでもいいんです。 C++ のプログラムでも、ディレクトリ構造を出力することが 出来ると思うんだけど、MS-DOSプロンプトでやってみたいんです。 どうしてそんなことがしたいのかというと、C++ が難しそうだから という理由なんです。 例えば、ファイルコピーを自動化するプログラムを作る時、 C++ のプログラムの出力をMS-DOSプロンプトへ渡す方法を知っていれば、 MS-DOSプロンプトでのコピーは copy コピー元 コピー先 という簡単な書式だから、ファイルコピーを自動化するプログラムも 簡単に作れそうだなと思ったんです。

  • C言語でVISUAL STUDIO

    コマンド プロンプトに入力すると’cl’は内部コマンドまたは外部コマンド操作可能なプログラムまたはバッチファイルとして認識されていませんと 表示されました。どうしたらいいのかさっぱりわかりません。助けてください。

  • C言語でいきなりつまづいてます。

    C言語でいきなりつまづいてます。 何がダメなのかご教授ください。 OSはウインドウズXPです。 (1)Borland C++ Compiler 5.5 With Command Line Tools Version 5.5.1をインストールしました。 (2)BCC5.5.1 環境ファイルパス設定プログラムをインストールしました。 (3)以下のソースを書きました。 #include <stdio.h> int main(void) { printf("Hello, \nworld"); return 0; } (4)hello.cというファイル名で保存しました。 (5)コマンドプロンプトでフォルダを(4)のファイルが置いてあるフォルダに指定し bcc32 hello.cと入力しました。 (6)出力が   hello.c になります。 エラーなどはありません。 以上です。 よろしくお願いします。

  • C言語初心者です。コマンドプロンプトのコンパイルが出来ません。

    C言語初心者です。コマンドプロンプトのコンパイルが出来ません。 教習所ではVisual studio 2008を用いてたので"cl"で出来たのですが、 自宅のパソコンのコマンドプロンプトでsoccer.cというファイルを作り、コンパイラしても「'cl'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」というエラーがでてしまいます。 Visual studioではありません。ノートPCに元から入ってた既存のコマンドプロンプトを使ってます。 なのでソフト名は分かりません。使ってるパソコンはwindowsです。 どなたかコンパイルの方法を教えてください!

  • C言語について。

    教えて・学ぶC言語入門という本のプログラムは、全てコマンドプロンプトで、対応できるのでしょうか?教えていただけないでしょうか? すみません。

  • C言語について

    C言語初心者です。 「かんたんC言語」という書籍で学習しております。 コマンドプロンプトでのプログラムの実行方法がよくわかりません。 教えて頂けないでしょうか?

  • c言語の問題で質問があります。

    * 繰り返しを利用して,printfの命令を一回だけ用いて, * -5 から -2 と 3 から 5 までの数字を表示するプログラムを作成せよ * * ※ プログラム中に printfは一回しか記述してはいけません * * ヒント:繰り返しの中で,条件分岐をうまく利用しましょう. * 【実行結果】 -5 -4 -3 -2 3 4 5 * */ これを、コマンドプロンプトで表示するには、メモ帳にどう入力すればよいですか?

専門家に質問してみよう