정말 수준 낮은 질문인데요...
글쓴이: 익명 사용자 / 작성시간: 금, 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로 개행을 읽어줘야 님의 루틴이 정상적으로 작동한다는 것을 의미합니다.
그래서 다음과 같이 만들 수도 있습니다.
retry: char s[1024] = { 0, }; printf("계산을 할 식을 입력하세요. (단 정수만 가능)\n"); if ( fgets (s, 1023, stdin) == NULL ) { printf ("식이 올바르지 않습니다. 다시 입력 하세요\n"); goto retry; } sscanf (s, "%d %c %d", &a, &cal, &b);댓글 달기