プロが教える店舗&オフィスのセキュリティ対策術

C言語で
32 42
21 11
54 10
21 76
43 32
55 34

のように2列のファイルがあり、ファイルを読み込んで各行の和を出力したい場合は
while( ( ret = fscanf( fpk, "%lf %lf", &x, &y ) ) != EOF ){
  printf("x+y=%f",x+y)
}
とします。では、2行ずつ読み込んで、各列の平均を求めるためにはどうしたらよいでしょうか。つまり、

(32+21)/2 (42+11)/2
(21+54)/2 (11+10)/2
(54+21)/2 (10+76)/2

といった感じでコマンドライン上に出力させたいわけです。ちなみにファイルの行数は不明とします。

よろしくお願いします。

A 回答 (3件)

1つ前の行のx,yを記憶しておきます。

それをpx,pyとします。
(px+x)/2と(py+y)/2が求める結果です。
コーディングは以下のようになります。
double px,py;
int lno = 0; //行番号
を追加
whileの中を以下のように変更。
while( ( ret = fscanf( fpk, "%lf %lf", &x, &y ) ) != EOF ){
lno++;
if (lno!=1){ //最初の行はスキップする
printf("(px+x)/2=%f (py+y)/2=%f\n",(px+x)/2,(py+y)/2);
}
px = x;
py = y;
}
    • good
    • 0

fscanf に「行」という概念は存在しないので, 単純に 4個ずつデータを読み込めばいいだけではないかなぁ.

    • good
    • 0

「2列のファイル」という意味が今一つわかりませんが、やっていることとやりたいことは分かりました。



処理手順をソースコードで考えられていませんか?
日本語で考え箇条書きにあとめてみられるとよいです。繰り返し部分は以下のような感じで。

1.〇〇を行う。
2.△△まで以下の処理を繰り返す。
 (1) ...
 (2) ...
3. ...

フローチャートなどのチャート図でもよいです。
アルゴリズムをきちんと母国語でまとめることが出来るようになるのが大切です。

なお、2行ずつ読み込むとのことですので行数が奇数であった場合の考慮をお忘れなく。

参考まで。
    • good
    • 0

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