• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:繰り返し処理の使い方)

繰り返し処理で合計計算を行いたいが、2つ目の結果が0になってしまう理由と解決方法を教えてください

このQ&Aのポイント
  • 繰り返し処理の使い方について質問します。特定の.plファイルで合計計算を行いたいのですが、2つ目の結果がなぜ0になってしまうのか理由がわかりません。
  • 問題の.plファイルでは、forループでデータを取得し、特定の条件に基づいて合計を計算しています。しかし、2つ目の合計計算の結果が0になってしまいます。
  • なぜ2つ目の合計計算が0になるのか、それを解決するためにはどうすれば良いのか教えてください。

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

一つ目のループの継続条件は、forの2つ目の式、つまり、 $_ =<stdin> ですから、 ** 一つ目のループはstdinが終了する(End of FIle)まで繰り返します ** つまり、一つ目のループが終った時点で、 stdinは終了してますから 二つ目のループでstdinから読もうとしても、何も読めずに終了します。 対処法は、あなたが期待するものによります。 ○400行目までをdata1,401行から800行までをdata2にしたいのなら、 一つのループで行数によって分岐すればいい。 for($line =0;$_ =<stdin>;$line++){ if($line < 400){ #1~400行まではここ @line = split/,/,; $data1 +=$line[1]; } elsif($line < 800){ #401~ 800行まではここ。400行までは上のifにいくので、ここには401行目以降しか来ない @line = split/,/,; $data2 +=$line[1]; } } そもそも、行番号が決まっているなら、終了条件に$_=<stdin>など使わなければいい。 #1~400行まで for($line =0;$line < 400;$line++){ $_=<stdin> ; #一応、終了チェックを入れたけど、入力行数が確実にあるなら入れなくてもいい if(not defined $_ ) {last ; } @line = split/,/,; $data1 +=$line[1]; }

cstag
質問者

お礼

回答ありがとうございます。 質問内容に記載しておりませんでしたが、 for($line =0;$_ =<stdin>;$line++){ if($line < 800){ @line = split/,/,; $data2 +=$line[1]; } } の部分は401から800行までの処理を行う予定でした。 例文まで記載して頂きありがとうございます。

関連するQ&A