- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:繰り返し処理の使い方)
繰り返し処理で合計計算を行いたいが、2つ目の結果が0になってしまう理由と解決方法を教えてください
このQ&Aのポイント
- 繰り返し処理の使い方について質問します。特定の.plファイルで合計計算を行いたいのですが、2つ目の結果がなぜ0になってしまうのか理由がわかりません。
- 問題の.plファイルでは、forループでデータを取得し、特定の条件に基づいて合計を計算しています。しかし、2つ目の合計計算の結果が0になってしまいます。
- なぜ2つ目の合計計算が0になるのか、それを解決するためにはどうすれば良いのか教えてください。
- みんなの回答 (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]; }
お礼
回答ありがとうございます。 質問内容に記載しておりませんでしたが、 for($line =0;$_ =<stdin>;$line++){ if($line < 800){ @line = split/,/,; $data2 +=$line[1]; } } の部分は401から800行までの処理を行う予定でした。 例文まで記載して頂きありがとうございます。