반응형
사전설명
숫자 두개와 연산기호를 입력받아 계산하는 계산기를 만드려고 했다.
풀이과정
(+ ,- ,* ,/)를 문자로 입력받아, 각 부호가 가지는 아스키코드로 연산 기호를 구별하여
계산하려고 했다.
숫자 두개를 먼저 입력받고 연산기호를 입력 받으려고 했는데...
%c 문자 형식 지정자를 입력받기도 전에 프로그램이 끝나버린다.
문자 형식 지정자를 먼저 받으니 진행이 가능했다.
계산기 만들기 성공!
계산은 보통 4+3 이런식으로 이루어지지 않나? 라는 생각으로 입력받는 순서를 변경해보았다.
왜 %c 지정자가 스킵되는걸까..
%C 형식 지정자가 스킵되는 이유
파power워 검색을 했는데, 잘 나오지 않아 Grok형님(일론머스크가 만든 AI)에게 물어보았다.
답변을 보고 내가 이해한 것
scanf 이후, \n을 따로 적지 않아도 다음 줄로 넘어가지 않았던가???
scanf는 입력을 받고나서 엔터를 친다.
%c 지정자는 공백문자를 포함한 모든 단일 문자를 읽는다고 한다.
첫번째 숫자를 적고 나서 엔터를 쳤던게 \n을 입력한 것으로 적용이 된 것이었다.
그래서, \n처리가 되지 않고 우측으로 나열이 되는 것이다.
해결법
- 내가 한 것처럼, %c를 먼저 입력받는다.
- scanf(" %c", &op); 처럼 형식 지정자 앞에 공백을 넣는다.
- getchar() 코드를 이전 scanf이후에 사용해 남아있는 \n(엔터)를 제거해준다.
내 풀이에 문제점
- 나누기가 제대로 표현되지 않는다. - 정수형태로 나누기를 하면 소숫점 아래를 지워버린다.
(변수를 float으로 선언해주어야 할까?) - 0으로 나누게 되면 오류가 발생한다.
(불가능하다는걸 어떻게 설명해야 할까?, 문자열로 불가능하다고 전달하려면 어떻게해야하지?)