프로그래밍

 3198, 1/160 회원가입  로그인  
   loliconlove
   C언어 프로그램 질문입니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2963 [복사]


#include<stdio.h>
int main(void){
int a,b,c,d,e,f;
char g;  
printf("연산자를 입력하시오 : ");
scanf("%c",&g);
printf("첫째 분모를 입력하시오 : ");
scanf("%d",&a);
printf("첫째 분자를 입력하시오 : ");
scanf("%d",&b);
printf("둘째 분모를 입력하시오 : ");
scanf("%d",&c);
printf("둘째 분자를 입력하시오 : ");
scanf("%d",&d);
  
일부만 잘라냈습니다. 분수의 덧셈 곱셈을 하는 프로그램인데요.

위의 방식을 쓰면 연산자를 인식하는데

#include<stdio.h>
int main(void){
int a,b,c,d,e,f;
char g;  
printf("첫째 분모를 입력하시오 : ");
scanf("%d",&a);
printf("첫째 분자를 입력하시오 : ");
scanf("%d",&b);
printf("둘째 분모를 입력하시오 : ");
scanf("%d",&c);
printf("둘째 분자를 입력하시오 : ");
scanf("%d",&d);
printf("연산자를 입력하시오 : ");
scanf("%c",&g);

아래처럼 맨뒤에 놓으면 인식을 못하고 그냥 종료하더라구요.

왜 그런건지 답변좀 부탁드립니다.^^

  Hit : 4888     Date : 2011/04/22 09:27



    
코털뽑기 #include<stdio.h>
int main(void){
int a,b,c,d,e,f;
char g;

printf("첫째 분모를 입력하시오 : ");
scanf("%d",&a);
printf("첫째 분자를 입력하시오 : ");
scanf("%d",&b);
printf("둘째 분모를 입력하시오 : ");
scanf("%d",&c);
printf("둘째 분자를 입력하시오 : ");
scanf("%d",&d);
printf("연산자를 입력하시오 : ");
scanf("%c",&g);
if(g == '\n')
printf("g is \\n\n");
else if(g == '+')
printf("g is +\n");
}
제가 만든 예제 코드입니다. 실행시켜보면
if문에서 g 는 \n이라는 것을 알수가 있습니다.
바로 전에 scanf문에서( scanf("%d",&d) )
숫자를 입력받고 엔터를 치지만
숫자는 d에 들어가는데 엔터칠때는 \n도 같이들어갑니다.
(\r\n 인지 \n 인지 햇갈리긴 하는데,, 위의 예제로 보면 \n이 들어가네요)
그러므로 숫자는 빠지지만 버퍼에 \n이 char형으로 남아있어
마지막에 저절로 char 형인 g에 들어가는데 아닌가 싶습니다..

아 C언어도 오랜만에하니 너무 햇갈리네요 ㅠㅠ
2011/04/22  
Prox fflush(stdin)을 네이버에 검색해보시면 좋은답변이 많이나올듯.. 2011/04/22