質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

1455閲覧

C言語でのファイルの読み込み方について

physics303

総合スコア89

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2016/11/07 01:29

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

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

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

いろいろやり方はあるとは思いますが、whileループ入る前に一行分読み込めば良いかなと...

1、1行読み込む(x1,y1)に入れる。
2、whileで2行目位以降の読み込み(x2,y2)に入れる。
3、計算する。
4、x2,y2をそれぞれx1,y1に入れる。
5、2へ

投稿2016/11/07 01:45

編集2016/11/07 01:48
lain

総合スコア161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

physics303

2016/11/07 01:50

ありがとうございます。 こんな感じでしょうか。 ret = fscanf( fpk,"%lf %lf",&x1,%y1 ) while( ( ret = fscanf( fpk, "%lf %lf", &x2, &y2 ) ) != EOF ){ printf("(x1+x2)/2=%f (y1+y2)/2=%f",(x1+x2)/2,(y1+y2)/2) ; x1 = x2; y1 = y2; }
lain

2016/11/07 02:26

いま、C言語が動く環境が無いので確認は出来ないのですが、そんな感じかと。 physics303さんの方で期待されていた動作するかの確認はお願いします。
physics303

2016/11/07 02:38

実行してみたら問題なく機能しました! ありがとうございました!
guest

0

2行ずつ読み込めばいいんですね

C

1for(;;) { 2 ret = fscanf( fpk, "%lf %lf", &x, &y ); 3 if(ret == EOF) break; 4 ret = fscanf( fpk, "%lf %lf", &x, &y ); 5 if(ret == EOF) break; 6 printf("x+y=%f",x+y) 7}

動作確認してませんが
質問は半分くらいしか読んでませんが

投稿2016/11/07 01:34

編集2016/11/07 01:40
matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

physics303

2016/11/07 01:52 編集

それは質問の回答になっていないと思います。
matobaa

2016/11/07 03:36

あぁ、そういうことか。 質問を読んでなかった
guest

0

適当ですが・・・。

c

1#define AVG 2 2sumx = 0; 3sumy = 0; 4avgcnt = 0; 5while( ( ret = fscanf( fpk, "%lf %lf", &x, &y ) ) != EOF ){ 6 sumx = sumx + x; 7 sumy = sumy + y; 8 avgcnt++; 9 if(avgcnt >= AVG){ 10 printf("%f %f\n",sumx/AVG, sumy/AVG); 11 sumx = 0; 12 sumy = 0; 13 avgcnt = 0; 14 } 15}

投稿2016/11/07 01:56

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2016/11/07 02:40

あぁ、そういうことか。 質問を読み違えてた…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問