dポイントプレゼントキャンペーン実施中!

aaa.exe という実行ファイルを作成し、
aaa.exe < aaa.txt で実行するとします。
aaa.txtの中身は適当な数列です。たとえば

15 4 8 25

とします。

このとき
aaa.exe < aaa.txt  は
aaa.exe  15 4 8 25  と同じ意味になるということでよろしいのでしょうか?

また、上の場合が正しかったとしても、aaa.txtの中身が
15 4 8 25 [改行]
2 4 5 10
などのように複数行あったときにはどのようになるのでしょうか?

A 回答 (3件)

>int A[MAX]; (MAXは適当に指定)


>に対して、
>A[0]=15
>A[1]=4
>A[2]=8
>A[3]=25
>と代入したいのです。

これを、aaa.exe < aaa.txt で実現するのであれば、

標準入力stdinからの入力を行うために

scanf("%d %d %d %d", A[0], A[1], A[2], A[3]);

でいかがでしょうか。
    • good
    • 0
この回答へのお礼

No.2の方へのお礼にも書いてあるとおり、
for(i=0;fscanf(stdin,"%d",&A[i])!=EOF;i++){}
と書くことで出来ました。
scanfを用いてもできるようなので、こちらも参考にさせていただこうと思います。
No.1における回答についても合わせまして、ありがとうございました。

お礼日時:2011/12/31 21:58

入門書でscanfとか使って「キーボード」から入力する、というのを見たことは無いですか?


入門書では省略されていますが、正確には「キーボード」ではなく、「標準入力」からの入力です。
通常は「端末(=キーボード)入力」が「標準入力」と結びついています。なので、リダイレクトが出てこないうちは「標準入力」=「キーボード」でとりあえずは問題ないわけです。

標準入力は、ファイルと同じように扱います。
つまり、基本は
http://oshiete.goo.ne.jp/qa/7218314.html
と一緒です。
・標準入力専用の関数を使う(fscanf→scanf等)
・入力先のFILE *として、fopenしたものではなく、定義済みのstdin を使う(fscanf(fp,~ → fscanf(stdin,~ 等)
のいずれかの方法が使えます
    • good
    • 0
この回答へのお礼

for(i=0;fscanf(stdin,"%d",&A[i])!=EOF;i++){}
とすることでできました。
私が以前に投稿した質問を用いて回答を書いてくださったこともあり、大変分かりやすかったです。
ありがとうございます。

お礼日時:2011/12/31 21:55

aaa.exe < aaa.txt  は aaa.exe  15 4 8 25  と同じ意味ではありません。



aaa.exe < aaa.txt は標準入力stdinからのファイル入力ですが、aaa.exe  15 4 8 25 はコマンドラインから argv[1]、argv[2]、argv[3]、argv[4] で 15 4 8 25 という「引数」を取得するものですので、C言語のプログラムの中では取扱いが全く違います。



>また、上の場合が正しかったとしても、aaa.txtの中身が15 4 8 25 [改行] 2 4 5 10 などのように複数行あったときにはどのようになるのでしょうか?

これは「入力ファイルに複数行のデータがある」というだけです。
プログラムaaa.exe内でどのように読み込んでいるかによって、どうなるかが決まります。

この回答への補足

回答ありがとうございます。
なるほど、コマンドラインから引数の取得とは違ったのですね。

では aaa.exe < aaa.txt はどのように扱えばよいのでしょうか?

具体的な操作をいうと、main関数内で定義した配列
int A[MAX]; (MAXは適当に指定)
に対して、
A[0]=15
A[1]=4
A[2]=8
A[3]=25
と代入したいのです。
標準入力からの入力ということですが、実際にどのような操作をすればよろしいのでしょうか?

補足日時:2011/12/31 20:30
    • good
    • 0

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