ここから本文です

c言語について分からない部分があるので教えて下さい。 例に示される様な形...

cge********さん

2016/11/1315:13:07

c言語について分からない部分があるので教えて下さい。


例に示される様な形で、これまで稼いだ毎月のアルバイト費がファイルに格納されている。
最初の数値はデータの個数を示している。

次にその個数分、アルバイトで稼いだ金額が続いている。このファイルからリダイレクションを利用して稼いだ金額を配列(大きさは100とする)に読み込み、稼ぎの総和と最大値、最小値を求めて出力するプログラムを作成せよ。

「データの格納列」
12
36000 33000 27000 35000 29000 34500 19500 31000 25000 8500 14500 55000
「実行例」
総額は348000円、最大値は55000円、最小値は8500円です。

リダイレクションについて調べてみたのですが、全く分からず困っています。
どなたか作り方とリダイレクションについて分かりやすく教えて下さい。

閲覧数:
93
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

reb********さん

2016/11/1316:53:23

リダイレクションというのは、キーボードから情報を入力するように作成されているプログラムを、ファイルから入力させる、というワザです。
プログラム自体は、普通にキーボード(標準入力)からの入力で動くように作ります。
そして、完成したプログラム(Windowsの場合は~.exe)の後ろに" < ファイル名"を付けて実行します。
例えば実行ファイルが test.exe で、入力ファイルが a.txt のとき、
test.exe < a.txt
↑こんな感じです。
a.txt の中身が、test.exe で意図したとおりのキーボード入力と同じ構成になっているならば、プログラムはキーボードから手で入力したのと同じように動きます。

質問文のバイト費用の合計プログラムの場合、
まずデータ個数の読み込みが必要です。
int変数 count を用意して、
scanf("%d" , &count)を使って整数値を取得するようにします。
次に金額の入力がcount回連続します。
これはfor()ループでscanf()をデータ個数だけ実行させ、配列に読み込みます。

↑ここまでがデータ取得。
稼ぎの総和と最大値、最小値は、読み込んだ配列に対してやはりforループで計算します。

main()の中身は以下のようになると思います。

int yen[100];
int i;
int count;
int total = 0;
int min = 0;
int max = 0;
/* まず個数を入力 */
scanf("%d", &count);
printf("count=%d\n", count);

/* 指定回数(count)ぶん配列へ金額を読み込む */
for(i=0;i<count;i++) {
ㅤscanf("%d", &yen[i]);
}

/* 配列の内容を見て、最小、最大、総和を出す */
for(i=0;i<count;i++) {
ㅤtotal += yen[i];
ㅤif (i==0 || min>yen[i]) min = yen[i];
ㅤif (i==0 || max<yen[i]) max = yen[i];
}

printf("総額は%d円、最大値は%d円、最小値は%d円です。\n", total, max, min);


コンパイルが出来たら、
12
36000 33000 27000 35000 29000 34500 19500 31000 25000 8500 14500 55000
をテキストファイルとして保存して、実行ファイルにリダイレクションして動かしてみてください。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

2016/11/1317:29:31

その同じデータを例えばscanfを使って「キーボードから入力する」プログラムだったら作れますか?
だったら、とりあえずプログラムはそれでOKです。

scanf、実は「キーボードから入力する」関数ではありません。「標準入力」から入力を得る関数、なのです。じゃあ標準入力ってなに...? OSから起動する時に「入力」の道筋として与えられるもの、と考えて下さい。普通は(特別な指定をしなければ)OSがキーボードに繋いでいます。だから、いままでscanfを「キーボードから入力する」関数として使ってきたかも知れません。

で、リダイレクトってのがその「特別な指定」です。コマンドラインからコマンドを起動する時にとりあえず <ファイル名 をつけてやると、ファイルの内容を標準入力に流し込むようになります。今回のデータファイルを例えばdata.txtとして、作ったプログラムをprogとすると、
prog <data.txt
としてやれば、scanfでデータが読み込める、そういう仕組み。

ちなみに、printfも実は「コンソール画面に出力する関数」ではなくて、標準出力に出力する関数で、OS側で画面につながれています。なので、こっちは >ファイル名 とすると出力がファイルに書き出されます。

foo********さん

2016/11/1316:58:22

> リダイレクションについて調べてみたのですが、全く分からず...

https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%80%E3%82%A4%E3%83%AC%...

標準入力(stdin)から読むプログラムを作んなさい、ってことです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる