• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

질문 드립니다.

21.05.29 20:06 작성 조회수 121

1

안녕하세요, 강의 듣다가 저 혼자 도움 없이 코드를 작성해보았는데 작동은 잘 되고 오류도 없다고는 뜨는데 한번 봐주실 수 있을까요?

저는 main 함수에 최대한의 변수를 선언하려고 했어요. 근데 각 함수마다 변수를 안데려온 것도 있는데 (calculate 함수를 예로 들면 result, num2만 다시 선언하고 op를 다시 선언 안해줬어요. 뭔가 op는 이미 getOperator 함수에서 (일시적으로) 고정된 변수 느낌이라 다른 함수에서 불러올 때 선언 안해줬거든요. 전부 다 선언해주는게 맞나요? 작동은 잘 돼서 헷갈리네요

강의 항상 잘 듣고 있습니다 ~

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>내가 만든 함수를 이용한 사칙연산 구현</h1>
    <div id="out">결과값과 식은 여기에</div>
    <script>
        //첫 번째 변수 선언
        function getFirstValue() {
            num1 = Number(prompt("1번 째 숫자를 입력해주세요."));
            return num1;
        };
        //연산자 선언
        function getOperator() {
            op = prompt("연산자를 입력해주세요.");
            return op;
        }
        //n 번째 변수 선언
        function getSecondValue(num2, n) {
            num2 = Number(prompt(n + "번 째 숫자를 입력해주세요."));
            return num2;
        }
        // 계산
        function calculate(result, num2) {
            if (op === "+") {
                result += num2;
            } else if (op === "-") {
                result -= num2;
            } else if (op === "*") {
                result *= num2;
            } else if (op === "/") {
                result /= num2;
            } else {
                result = "연산자 오류";
            }
            return result;
        }
        // 출력
        function print(eq, result) {
            output = document.getElementById("out");
            return out.innerHTML = "<h3>입력한 식 : " + eq + "<br> 계산 결과 : " + result + "</h3>";
        }
        // 메인함수
        function main() {
            var num1 = getFirstValue();
            var result = num1;
            var n = 2;
            var str = ""; 
            str = num1;
            var eq;
            while(true) {
                var op = getOperator();
                if (op === "q") { break; } 
                var num2 = getSecondValue(num2, n);
                str += op + num2;
                eq = str;
                result = calculate(result, num2);
                n++
            }
            var output = print(eq, result);
        }
        main();
    </script>
</body>
</html>

답변 1

답변을 작성해보세요.

0

안녕하세요? 답변이 늦어서 죄송합니다.

일단은 정상적으로 동작하면 큰 문제가 되지 않는데요. 이후에 차차 더 좋은 코드를 짜는 방법을 학습하시면 됩니다.

그리고 가능하면 op도 매개변수로 사용해 주는 것이 좋습니다. 나중에 배우겠지만, 전역변수를 사용하면 유지보수에 좋지 않기때문에 가능하면 지역변수, 매개변수를 적절하게 사용하는 것을 권합니다.