본문 바로가기

내가 꾸는 꿈

간단한 계산기 만들기 #2 [노베이스 게임개발 12일차]

반응형

이번 시간에는 지난 시간에 만들었던 내 프로그램의 오류를 고치고 최적화시키는 작업을 해볼 것이다.

 

먼저 계속해서 오류가 발생했던 부분인데

나머지 연산은 실수형에서는 작동하지 않기 때문에 형변환을 사용하여 작업을 해야 한다고 한다.

그리하여 각 값에 (int)를 입력하여 정수형으로 바꾼 후 실행하면 나머지 계산도 정상적으로 작동하게 된다.

 

그리고 원래는 result를 선언과 동시에 할당하는 식으로 코드를 만들었었는데 이렇게 하면 코드에 오류가 생성되었다.

(ex. float result1 = input1 + input2    ....이렇게 하자 오류가 발생했다.)

왜 그런지 찾아보고자 했지만 답을 찾지 못하여 따로 한쪽에 메모해 놓고 나중에 관련된 내용이 나온다면 보충하려고 한다.

 

이제 내가 쓴 코드를 더 간략하고 효율적으로 바꿀 수 있는 방법을 배웠다.

먼저 쓸데없이 반복되는 코드를 하나로 통일시킬 수 있었는데 바로 switch구문의 printf부분이었다.

그리고 result를 굳이 1, 2, 3, 4 이렇게 나눌 필요가 없었다.

case를 만족한 하나의 구문만이 실행되기 때문에 result를 공통으로 써도 하나의 값만이 할당되기 때문이다.

그 후 switch구문 밖에 result값을 출력해 주면 이미 result값이 case 내에서 할당되었기 때문에 그대로 출력할 수 있게 된다.

 

그렇게 해서 만들어진 코드이다.

훨씬 보기 좋고 반복됨이 없이 깔끔하게 코드가 정리된 모습이다.

하지만 이때 문제가 하나 발생하는데 다른 연산들은 정상적으로 처리되지만 하나 default구문이 정상적으로 처리되지 않는 문제가 발생한다.

이유는 default값에서 "올바른 연산자를 입력해 주세요."라는 문구를 출력한 후 종료되어야 하는데 그 이후의 "결과는 ~~ 입니다"라는 문구까지 같이 출력이 되는 문제가 생긴다.

또, 다른 함수들에는 result값이 할당이 되는데 default구문에서는 result값이 할당되지 않아 마지막에 출력할 때 result가 비어있는 상태가 된다는 점이다.

 

이때 문제를 해결하기 위해 제안된 것으로는 bool을 이용해서 true false를 통해 출력문을 구분 지어 주는 것이다.

 

bool을 통해 valid라는 변수를 선언해 주고 true로 할당해 준다.

그 후 default에서 valid를 false로 할당되게 설정해 주고 switch구문 밖에 if구문을 넣어 valid가 참일 경우에만 결괏값을 출력하고 그렇지 않은 경우 오류문장을 출력하게 만들 수 있다.

그리고 if구문에서 valid == true라는 구문은 굳이 적을 필요 없이 valid만 넣어줘도 참일 경우에만 실행이 된다.

 

그리고 헤더파일을 배운 것을 활용해서 코드를 더 보기 쉽게 압축하였다.

먼저 #include를 모두 헤더파일에 넣어두고 함수를 선언한 것들 또한 헤더파일에 넣어준 후

소스파일에 #include "Header.h"를 입력하여 헤더파일을 모두 불러오면 끝이다.

실행시켰을 때도 문제없이 작동하는 것을 보여주었다.

 

 

후기:

다음 시간은 스스로 문제를 풀어볼 시간이다.

 

*예제프로그램에서 만든 프로그램에 연산자로 입력받은 값이 'p일 경우 value1의 value2 제곱을 계산하고

'x'일 경우 프로그램을 종료하며 'r'일 경우 랜덤한 연산자를 선택하여 연산결과를 출력하는 프로그램을 작성하세요.

제곱을 게산할 때 cmath헤더파일에 선언된 pow함수를 랜덤을 계산할 때 stdlib헤더파일에 선언된 rand함수를 사용하세요.

 

문제를 보자마자 벌써부터 머리가 아파온다. 이전에 써놓았던 글들을 복습하며 열심히 해봐야겠다.

 

 

*본 포스팅은 학생의 입장에서 쓴 글로 정확하지 않을 수 있으며 댓글로 피드백해 주시면 감사하겠습니다.

클래스 101 개발자 라라 님의 강의를 통해 학습한 내용을 기반으로 두고 있습니다.

반응형