// '$'를 누를 때까지 키보드로부터 문자를 읽고 출력하는 프로그램
#include <stdio.h>
#include <conio.h> //getche() 함수의 사용
int main()
{
char ch;
int i;
printf("Please enter any charecter : ");
for(i=0; (ch=getch()) !='$'; i++)
{
printf("\nYou typed : %c\n, ch);
printf("Please enter any charecter : ");
}
putchar('\n')
return 0;
}
결과
Please enter any charecter : a
You typed : a
Please enter any charecter : b
You typed : b
Please enter any charecter : c
You typed : c
Please enter any charecter : $
#include <conio.h>
이 문을 리눅스에서는 사용할 수 없다.
리눅스에서는 getch(), getche()함수를 사용할 수 없기 때문이다.
그래서 리눅스에선 getchar()함수를 사용해야 한다.
for(i=0; (ch=getch()) !='$'; i++)
for(i=0; (ch=getchar()) !='$'; i++)로 바꿈
하지만 위처럼 getchar() 함수로 문자를 읽은 후 버퍼에 <엔터키>가 남아 있기 때문에
printf("\nYou typed : %c\n, ch); 밑에
getchar();를 입력해야 한다. 윈도우 운영체제라면 fflush(stdin);을 사용하겠지만 리눅스에선 이 명령어에 대한 인식이 없기 때문이다.
결과는
Please enter any charecter : a
You typed : a
Please enter any charecter : b
You typed : b
Please enter any charecter : c
You typed : c
Please enter any charecter : $
이런식으로 나온다. 중간에 빈칸이 있는 이유는 getche()를 썼을땐 글자하나 입력하면 바로 입력하지만getchar()함수를 이용하면 엔터키를 입력하면 문자로 받아들이는 것을 안보이게하였지만 실제로는 존재하기 때문이다.
printf("\nYou typed : %c\n, ch);에서
%c때문에 a를 입력하면 아스키코드 'a'로 나타내지만
printf("\nYou typed : %d\n, ch);로 입력하면
'a'는 아스키 코드 표를 보면 97이기 때문에
Please enter any charecter : a
You typed : 97
Please enter any charecter :
로 나온다.
getchar();함수 입력한걸 주석처리 하게 되면
Please enter any charecter : a
You typed : 97
Please enter any charecter :
You typed : 10
Please enter any charecter :
으로 나온다. 10은 엔터키의 아스키코드기 때문이다.
#include <stdio.h>
#include <conio.h> //getche() 함수의 사용
int main()
{
char ch;
int i;
printf("Please enter any charecter : ");
for(i=0; (ch=getch()) !='$'; i++)
{
printf("\nYou typed : %c\n, ch);
printf("Please enter any charecter : ");
}
putchar('\n')
return 0;
}
결과
Please enter any charecter : a
You typed : a
Please enter any charecter : b
You typed : b
Please enter any charecter : c
You typed : c
Please enter any charecter : $
#include <conio.h>
이 문을 리눅스에서는 사용할 수 없다.
리눅스에서는 getch(), getche()함수를 사용할 수 없기 때문이다.
그래서 리눅스에선 getchar()함수를 사용해야 한다.
for(i=0; (ch=getch()) !='$'; i++)
for(i=0; (ch=getchar()) !='$'; i++)로 바꿈
하지만 위처럼 getchar() 함수로 문자를 읽은 후 버퍼에 <엔터키>가 남아 있기 때문에
printf("\nYou typed : %c\n, ch); 밑에
getchar();를 입력해야 한다. 윈도우 운영체제라면 fflush(stdin);을 사용하겠지만 리눅스에선 이 명령어에 대한 인식이 없기 때문이다.
결과는
Please enter any charecter : a
You typed : a
Please enter any charecter : b
You typed : b
Please enter any charecter : c
You typed : c
Please enter any charecter : $
이런식으로 나온다. 중간에 빈칸이 있는 이유는 getche()를 썼을땐 글자하나 입력하면 바로 입력하지만getchar()함수를 이용하면 엔터키를 입력하면 문자로 받아들이는 것을 안보이게하였지만 실제로는 존재하기 때문이다.
printf("\nYou typed : %c\n, ch);에서
%c때문에 a를 입력하면 아스키코드 'a'로 나타내지만
printf("\nYou typed : %d\n, ch);로 입력하면
'a'는 아스키 코드 표를 보면 97이기 때문에
Please enter any charecter : a
You typed : 97
Please enter any charecter :
로 나온다.
getchar();함수 입력한걸 주석처리 하게 되면
Please enter any charecter : a
You typed : 97
Please enter any charecter :
You typed : 10
Please enter any charecter :
으로 나온다. 10은 엔터키의 아스키코드기 때문이다.