http://www.perlmonks.org?node_id=852829

changma_ha has asked for the wisdom of the Perl Monks concerning the following question:

hi all. I am trying to do a program in which the user give some numbers as input and the output is the sum of the numbers in that input. I am getting the sum right but the problem is when i am giving input after it . it takes the output of the fist input as it input.my code is like:

#! /usr/bin/perl use strict; use warnings; #use Data::Dumper; my $linetotal=0; my $gtotal =0; my $n =0; while (my $line = <STDIN>){ #$line =~ s/^\s+|\s+\n$/ /g; #chomp ($line); my @numbers = split (/ /,$line); $n++; #print Dumper \@numbers; foreach my $number (@numbers){ $linetotal +=$number ; #chomp ($linetotal); } # $line =<STDIN>; print "Total in $n input is : $linetotal \n"; } $gtotal +=$linetotal; print "Grand Total is : $gtotal\n";

Suppose if i give input as

1 2 3

it should give output as

"Total in 1 input is 6"

2 4 5

Total in 2 input is 11

Instead it is giving the 2nd output as 17. plz help me out.Thanks in advance.

Replies are listed 'Best First'.
Re: Sum of Input
by marto (Cardinal) on Aug 04, 2010 at 09:24 UTC

    This isn't your fist post here, this is in the wrong section of the forum. Where should I post X? is displayed each time your are posting, please don't ignore it's advice.

    Examine your code and the input data (note that 6 + 11 = 17), notice that you aren't resetting $linetotal to zero after printing the results for each line.

      Thanx marto for your suggestion and advice.From now onwards i will not post in the wrongs threads. Now my problem is solved.

Re: Sum of Input
by SuicideJunkie (Vicar) on Aug 04, 2010 at 13:54 UTC

    To solve your problem next time, add lots of print statements.

    In this case, extra print statements could have shown you:

    Summing over 3 numbers; 1 2 3 Adding 1 Total is 1 Adding 2 Total is 3 Adding 3 Total is 6 Summing over 3 numbers; 2 4 5 Adding 2 Total is 8 Adding 4 Total is 12 Adding 5 Total is 17
    If you had seen that, the bug would be obvious, right? :)

Re: Sum of Input
by murugu (Curate) on Aug 04, 2010 at 10:02 UTC
    You need to reset the $linetotal at the end of the loop.

    Regards,
    Murugesan Kandasamy
    use perl for(;;);

      And increment $gtotal inside the loop.