정말 수준 낮은 질문인데요...
글쓴이: 익명 사용자 / 작성시간: 금, 2011/03/11 - 10:21오후
#include <turboc.h> // 사칙연산기 int main() { int a, b, c; char cal; for (;;) { printf("계산을 할 수를 입력하세요.(단 정수만 가능)\n"); printf("첫번째 수 : "); scanf("%d", &a); printf("두번째 수 : "); scanf("%d", &b); printf("연산자를 입력해주세요.\n"); printf("※ 가능한 연산자 : +,-,*,/\n"); scanf("%c", &cal); switch (cal) { case '+': c = a + b; break; case '-': c = a - b; break; case '*': c = a * b; break; case '/': c = a / b; break; } printf("%d %c %d = %d 입니다.\n", a, cal, b, c); } }
이걸 컴파일 해서 실행시키면
연산자를 입력받는 부분부터 이상하게 되더라구요.
잘못된 부분이 어딘지 도저히 모르겠습니다.
무지렁이 하나 구해주신다고 생각하시고 알려주시면 감사하겠습니다.
Forums:
cal을 받기전에 getchar하셔요. 구글에
cal을 받기전에 getchar하셔요.
구글에 "scanf 개행"이라고 검색하시면 왜 그런지 알수잇습니다
흘러가고있는 지금 이 시간에 충실하자.
죄송한데요...
scanf("%c", &cal);을
cal = getchar();로 바꾸어도 실행 결과는 동일한데요.
좀 더 구체적으로 실행 결과를 말씀드리면
두번째 숫자 입력후
연산자 입력을 받지 않고
첫번째 숫자가 출력되고 루프로 넘어갑니다.
이거 어떻게 해결 하죠?
구글 검색을 해 보셨으면 이해하셨을텐데요.
구글 검색을 해 보셨으면 이해하셨을텐데요. scanf가 개행(\n)을 읽어들이기 때문에 b의 값에는 숫자가 들어간 것이 아니라 개행이 들어가 있다는 의미입니다. 그러니 cal에는 b에 들어가야 할 값이 들어가는 거죠.
그래서 위의 분의 답변은 scanf를 getchar로 변경하라는 것이 아니라 scanf를 한 후에, getchar로 개행을 읽어줘야 님의 루틴이 정상적으로 작동한다는 것을 의미합니다.
그래서 다음과 같이 만들 수도 있습니다.
댓글 달기