
int 를 이용해 짝수, 홀수를 구분하는 코드에선 예를들어 1.4를 입력하게 되면,
다시 n의 값을 물어봤는데
강의 뒷부분에서 char를 이용한 코드에서는 동의하냐는 부분에 정해진 값이 아닌 x를 입력하게 되면
아무일도 일어나지 않고 터미널부분에 다시 $가 나타나게 되는데요.
앞 코드와 달리 다시 물어보지 않는 이유는 뭔가요?
정해진 답이 있고 없고의 차이인가요?
int 를 이용해 짝수, 홀수를 구분하는 코드에선 예를들어 1.4를 입력하게 되면,
다시 n의 값을 물어봤는데
강의 뒷부분에서 char를 이용한 코드에서는 동의하냐는 부분에 정해진 값이 아닌 x를 입력하게 되면
아무일도 일어나지 않고 터미널부분에 다시 $가 나타나게 되는데요.
앞 코드와 달리 다시 물어보지 않는 이유는 뭔가요?
정해진 답이 있고 없고의 차이인가요?
comment
이 질문하러 왔는데 똑같이 질문하신 분이 계시군요
답글 달아주신 분들 감사합니다!
get_int, char, float("~")함수는 수업을 위해 임의로 만들어진 함수이기 때문에 합리적인 유추로 답변 드릴게요.
일반적으로 사용자가 입력을 잘못했을 때 프로그램이 다시 물어보도록 만들고 싶다 -> 반복문을 사용해야 합니다.
그러나, get_~함수는 입력을 받을 자료형과 입력된 값의 자료형이 다를 경우 다시 물어보도록 설계되어 있습니다.
예시) scanf_s 함수를 이용해 1.4를 입력받아 int a에 저장하면 a값은 1입니다. 왜? a가 정수니까, 소수점 부분은 날라갑니다.
get_int(~) 함수를 이용해 1.4를 입력받으면 프로그램이 사용자에게 정수값을 내놓으라고 다시 get~함수를 호출합니다.
그렇다면 get_int()을 이용해 정수를 입력받아야 하는 입장에서는 1.4를 입력받으면 함수 설계 상 다시 요청을 하는 것이죠.
그러나 char부분은 좀 다릅니다. 우선, get_char("~");함수는 입력받는 것이 문자입니다. 'y', 'Y', 'n', 'N', 'x' 모두 문자이죠.
그렇기 때문에 get_char()함수가 'x'를 입력으로 받은 건 정상입니다.
그렇다면 뭐가 문제일까요? 문제는 if-else문의 조건입니다. 입력받은 문자가 'y', 'Y', 'n', 'N' 중 어디에도 속하지 않기 때문에
if문 내 printf(~) 함수를 실행할 수 없었기 때문입니다. 만약 if(input != 'Y' || input != 'N') printf("incorrect input"); 문장이 추가되어 있었다면 x가 입력되었을 때 "비정상적인 입력"이 화면에 떴을 것입니다.
int 자료형에서는 1.4라는 수를 받아들일 수가 없습니다. 단순히 정수만을 받아들일 수 있는 자료형이며, 1.4를 받을 수 있는 자료형은 float나 double입니다.
반면에, char 자료형은 x를 받아들일 수 있습니다.
get_자료형은 주어진 자료형이 아닌 다른 자료형으로 입력되었을때만 다시 질문을 할 뿐 입니다.