해결된 질문
작성
·
328
2
안녕하세요. 궁금한 점 있어 질문드립니다.
예제와 비슷한 코드를 구성해 질문하겠습니다.
14행은 입력의 첫 글자를 제외한 나머지 글자들을 지워주는 코드로 이해했습니다.
제가 이해한 바로는 프로그램을 실행한 뒤, 콘솔창에 hello를 입력하면,
입력 버퍼에 'h', 'e', 'l', 'l', 'o', '\n'가 저장되고, 제일 먼저 'h'가 char c에 반환됨
이후 putchar을 통해 c에 반환됐던 'h'가 출력됨
나머지 입력 버퍼에 있던 글자들은 두 번째 while문 조건식을 충족하지 못해(\n 제외) 입력 버퍼에서 사라짐
(escape sequence를 입력하기 전까지)새로운 입력 반복
이렇게 이해했습니다.
여기서 3번이 조금 헷갈립니다.
첫 글자를 char c에 반환하고 putchar()로 실행한 뒤, 입력 버퍼에 있던 나머지 글자들은 두 번째 while문 안의 getchar()에 의해 한 글자씩 반복되며 입력 버퍼에서 사라지는 건가요?
그리고 첫 번째 while문은 char c로 값을 반환하는데, 두 번째 while문은 글자를 반환하는 변수가 없는 것 같습니다. 그렇다면 c에 반환된 첫 글자를 제외한, 입력 버퍼에 있던 글자들은 어딘가 반환되지 않고 그냥 사라지는 데이터들인가요?
최대한 제가 모르는 점을 정리했는데, 제대로 전달이 됐는지 모르겠네요 ㅜㅜ..
늘 친절한 답변 감사합니다!
답변 1
2
안녕하세요, 답변 도우미 Soobak 입니다.
대체적으로 옳게 파악하신 것 같습니다.
조금 부연 설명을 드려봅니다.while (getchar() != '\n') continue;
코드라인에서의 getchar()
함수는 버퍼로부터 읽어들인 문자를 반환하기는 하지만, 어떤 변수에도 저장되지 않으므로 실질적으로는 "사라지는" 데이터로 볼 수 있습니다.
이 때, getchar()
함수가 문자를 반환하지 않는 것은 아닙니다. 변수에 저장되지 않을 뿐입니다.
해당 강의의 주제인 switch - case
문, 그리고 예제와 연결지어서,
입력으로 주어지는 문자열 데이터의 첫 글자를 제외하고는 버퍼에 남아있는 다른 문자들은 무시하고, 다음 줄의 사용자 입력을 새로 받기 위한 용도입니다.
추가적으로, 질문의 주제를 벗어나지만 일부 잘못된 표현들을 정정 드려봅니다.
"3. 나머지 입력 버퍼에 있던 글자들은 두 번째 while문 조건식을 충족하지 못해(\n 제외) 입력 버퍼에서 사라짐"
: while()
문 안의 조건식인 getchar() != '\n'
을 충족하기 때문에 continue ;
가 실행되는 것입니다.
"(escape sequence를 입력하기 전까지)새로운 입력 반복"
: escape sequence
는 문자열 내에서 특정 동작을 표현하거나, 보이지 않는 문자, 특수 문자 등을 표현하기 위한 용도로 \
(백슬래시) 로 시작하는 문자조합입니다.
예시 )
'\\'
: 백슬래시 자체를 표현하기 위해 사용
printf("\\")
으로 \
를 출력할 수 있습니다.
'\''
: 작은 따옴표를 표현하기 위해 사용
char c = '\'';
, 변수 c
에는 작은 따옴표가 저장됩니다.
'\n'
: 개행, 줄바꿈을 나타내기 위해 사용
'\a'
: 알람 소리를 발생하기 위해 사용
등등 을 escape sequence
라고 일컫습니다.
첫 번째 while()
반복문의 탈출 조건인 '.'
문자는 escape sequence
가 아닙니다.
항상 질문을 친절히 해주셔서 저도 굉장히 감사드립니다.