Dear Senior Programmer Analyst did it solves the problem ? I don't think so .
there is one very simple logical flow if ($temp_unit eq 'C' or 'c'){ should be if ($temp_unit eq 'C' or $temp_unit eq 'c'){ that's all the second one is from F to C in last print command is well understood. ----- Original Message ----- From: "Wagner, David --- Senior Programmer Analyst --- WGO" <[EMAIL PROTECTED]> To: "'Eri Mendz'" <[EMAIL PROTECTED]>; "perl digest" <[EMAIL PROTECTED]> Sent: Friday, January 31, 2003 12:48 PM Subject: RE: program logic not right > Eri Mendz wrote: > > Good day all, > > > > Have here a temperature conversion program im trying to "perfect" but > > no chance, its not working right. The input validation portion is > > fine, im satisfied likewise with the conversion to celsius. My > > problem is conversion to fahrenheit: the answer is not right so is > > the temp unit during printout. The problem must be obvious but i > > pick-up slow. Can you help me out and guide me :-) > > > > #!/usr/bin/perl -w > > use strict; > > > > print "This is a temperature conversion program.\n"; > > print "Enter temperature to convert(e.g., 100C, 212F): "; > > chomp(my $input = <STDIN>); > > if ($input =~ m/^([+-]?\d+)(\.{1}\d+)?[ ]?([cCfF])$/){ #validate > > input format my $real_num = $1; > > my $temp_unit = $3; > > my ($in_c, $in_f) = ($real_num, $real_num); > > if ($temp_unit eq 'C' or 'c'){ > > $in_f = ($real_num * 9 / 5) + 32; > > printf "%.2f C is %.2f F\n", $real_num, $in_f; > > } else { #it must be F if not C > > $in_c = ($real_num - 32) * 5 / 9; > > printf "%.2f C is %.2f F\n", $real_num, $in_c; > > } > > } else { > > #input failed validation check > > print "Error is detected in input\n"; > > print "input format is number, optional space then letter C or F, > > case insensitive, in exact order\n"; > > print "Please check your input and try again.\n"; > > } > > Staring at the code trying to debug i realize is no nice exercise. > > But i want to learn, so no excuse. TIA. > > I changed two points in your code: > > m/^([+-]?\d+)(\.{1}\d+)?[ ]?([cCfF])$/ > to > m/^([+-]{0,1}\d+(\.\d{0,2}){0,1})\s*([CF])$/i > ^--- make it case > insensitive > ^----^ > |--- either CF > ^-^ > |----- Zero or more spaces > ^---------------^ > |------ You can have one set of .nn one or two > digits > ^-^ > ^-------^ |---One or more digits > |----you can have one of them or none > Then I switched in portion for calculation of F to C: > > printf "%.2f C is %.2f F\n", $real_num, $in_c > to > printf "%.2f F is %.2f C\n", $real_num, $in_c; > > You also were not picking up the portion to the right of decimal point if > any was put in. > > See what you think. > > I will send you the code I ran ( w2k ActivePerl 5.6.1 build 623) > > Wags ;) > > > ********************************************************** > This message contains information that is confidential > and proprietary to FedEx Freight or its affiliates. > It is intended only for the recipient named and for > the express purpose(s) described therein. > Any other use is prohibited. > **************************************************************** > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]