티스토리 뷰
반응형
개발자의 C언어 독학 기초 # scanf
모든 강의 자료 : www.codingnow.co.kr/
C언의 consol 창의 입력 명령중 흔하게 사용되는 scanf이다.
scanf("%c",&val1);
// 입력형식, 입력받을 변수
이와 같이 사용하면 val1변수에 입력된 값이 저장되서 리턴된다.
#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해
void main(void)
{
system("chcp 65001"); //gcc 한글 깨짐
system("cls"); //화면지움
printf("(char을 입력하세요) : ");
char val1;
scanf("%c",&val1); // <-------------- scanf!!
printf("char[%c]", val1);
printf("\n\n");
return;
}
출력결과 이다.
어렵지 않게 동작 확인이 가능하다.
사용하다 주의할 점이 있다.
아래 코드와 같이 연속으로 두개 이상의 값을 입력받으려 할때 한개만 입력이 되고 끝나 버리는 경우가 있다.
#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해
void main(void)
{
system("chcp 65001"); //gcc 한글 깨짐
system("cls"); //화면지움
printf("(char을 입력하세요) : ");
char val1;
scanf("%c",&val1);
printf("char[%c]", val1);
int val2;
//fflush(stdin); //입력 버퍼지우기
//while( (val2 != getchar() == '\n' ) ); //입력 버퍼의 enter 지우기
printf("\n\n(int을 입력하세요) : ");
scanf("%c",&val2);
printf("\nbyte[%c]", val2);
printf("\n\n");
return;
}
출력 결과이다.
하나만 입력 했는데 종료 되어 버렸다.
원인은 값 입력 후 enter값이 입력 버퍼에 남아 있어서이다.
아래 코드는 enter값을 입력 버퍼에서 지워주는 코드를 추가한 것이다.
두가지 방식이 있는데 fflush를 사용하거나,
fflush(stdin); //입력 버퍼지우기
getchar를 사용하여 지워주면 문제 없이 동작을 한다.
while( (val2 != getchar() == '\n' ) ); //입력 버퍼의 enter 지우기
아래 코드는 fflush를 적용한 것이다.
#include <stdio.h>
#include <windows.h> //system 명령 실행을 위해
void main(void)
{
system("chcp 65001"); //gcc 한글 깨짐
system("cls"); //화면지움
printf("(char을 입력하세요) : ");
char val1;
scanf("%c",&val1);
printf("char[%c]", val1);
int val2;
fflush(stdin); //입력 버퍼지우기
//while( (val2 != getchar() == '\n' ) ); //입력 버퍼의 enter 지우기
printf("\n\n(int을 입력하세요) : ");
scanf("%c",&val2);
printf("\nbyte[%c]", val2);
printf("\n\n");
return;
}
출력 값이 정상 문제 없이 나온다.
반응형
'C언어 강의' 카테고리의 다른 글
C언어 별을 출력 # for do while을 이용 (0) | 2020.04.17 |
---|---|
C언어를 이용한 간단한 게임을 만들어 보자 (0) | 2020.04.17 |
개발자의 C언어 독학 기초 # gets, puts (0) | 2020.04.16 |
개발자의 C언어 독학 기초 # 응용편 2의보수 (bit연산)구하기 (0) | 2020.04.15 |
개발자의 C언어 독학 기초 # 응용 / 2진탐색 (0) | 2020.04.14 |