2011-04-06 3 views
3

나는 누적기를 유지하고 간단한 연산을하는 Perl에서 간단한 계산기를 만들어야한다. 누산기는 0에서 시작한 다음 수신 한 결과에 따라 변경됩니다. 현재 나는 일을 더하기 위해 노력하고 있습니다. 입력 한 연산자가 + 무언가 잘못되었는지 확인합니다. 예 :겉으로보기에는 틀린 대답을주는 조건문 : 내가 무엇을 놓치고 있냐

누산기 : 0
연산자 : 여기에 넣은 값이 모두 추가됩니다. 이 문장 포함.
피연산자 : 4

배터리는 4

그것은 수 있지만 아무것도를 잡는다. 나는 grep과 연산자 목록을 사용해 보았습니다. 나는 모든 아이디어를 다 써 버렸다. 여기에 내 코드 (참고로 첫 번째 게시물 그래서 어떤 멍청한 놈 오류 좀 도와)입니다 : 당신이 -l 옵션을 사용하지 않는 한 "+\n"에 대해 "+"을 비교하고, 그래서

my $running = 1; 
my $accum = "0"; 
my $operator; 
my $operand; 

print("Welcome to the simple, command line calculator.\n"); 
print("To terminate, press Control-C.\n\n"); 

while ($running){ 

    print("\nAccumulator: ".$accum."\n"); 
    print("Operator: "); 
    $operator = <STDIN>; 
    if ($operator == "+"){ 
      print("Operand: "); 
      operand = <STDIN>; 
      $accum += $operand; 
    } 
    else{ 
     print("Invalid operator: ".$operator."\n"); 
    } 
} 
+1

'경고 사용 경고'=> '모두'; '. – tchrist

+0

안녕하세요, 16 행에서 변수 $ 피연산자의 "$"기호를 생략했는지 확인 했습니까? 그건 도움이 안돼. –

답변

13

펄, 입력에서 끝나는 줄 바꿈을 제거하지 않습니다. 보통 chomp($operator); 같은 soemthing하고 싶다. 말했다

, 당신의 실제 문제는 == 숫자 비교를 수행한다는 것입니다, 모두 "+""+\n" 숫자 맥락에서 0으로 평가합니다. ( -w을 사용하면 이 항상이됩니다. 이에 대해 경고합니다.) 문자열 비교에 eq 연산자를 사용하십시오.

+0

+1은'chomp' (그리고'-w')에 대해서도 언급합니다. – cHao

+4

'-w'를 사용하지 말고'warnings' 프라그 마를 사용하십시오. 토론을 위해 perllexwarn에 대한 perldoc을보십시오 - http://perldoc.perl.org/perllexwarn.html – daotoad

+0

@daotoad : perl 버전에 달려 있습니다; 5.8 버전에서 나는 어떤 장소에서 사용해야했고'-w'는'warnings 사용하기 '를 포착한다. (이 버전의 버그는 분명히 5.10+에서 예상대로 작동합니다.) – geekosaur

3

==은 문자열이 아닌 숫자를 비교합니다. 문자열을 비교하면 문자열이 숫자로 변환됩니다. 숫자가 아닌 문자열의 경우 이는 0이됩니다. 따라서 $operator == "+"0 == 0이됩니다.

문자열의 경우 대신 eq을 사용하십시오. 또한 <STDIN>은 줄 바꿈을 유지합니다. chomp $operator도 확인하십시오.

+0

나는 그것을 시도했지만 여전히 작동하지 않았다. 단지 모든 것이 + – Betterthanyoda56

+1

'perl -e 'print ("임의의 문자열"== 0, "\ n")''을 포함한 무효 연산자라는 것을 알려줍니다. 번호로 시작하지 않는 문자열은 다른 컨텍스트에서 사실 일지라도 숫자로 변환하면 0이됩니다. – cHao

+0

@Better : [geekosaur 's answer] (http://stackoverflow.com/questions/5560551/conditional-statement-giving-seemingly-wrong-answer-what-am-i-missing/5560562#5560562)를 참조하십시오. 숫자 대 문자열 문제는 문제의 절반에 불과했습니다. – cHao

관련 문제