continue문 질문입니다
#include <stdio.h>
int main(void)
{
char ch;
while (1) {
ch = getchar();
if (ch == 'x')
break;
if (ch == 'q')
continue;
putchar(ch);
}
return 0;
}
이 예제에서 한 문자를 입력받을 때마다 while문이 실행되며 x인지 q인지를 검사하는 것으로 알고 있습니다. 만약에 aaaq를 입력하고 엔터를 누르지 않앗다면 q를 입력하는 순간 컨티뉴 문이 작동하여 putchar을 실행 시켜야 한다고 생각하는데 엔터를 눌러야만 작동하는 것이 이해가 안됩니다 ㅜㅜ 또한 getchar 함수는 한 글자씩 입력을 받는데 제가 if(ch == zxc) break;를 추가하고 zxc를 입력 후 엔터를 치면 브레이크 문이 작동 됩니다.
정리하자면 q나 x를 입력하는 순간에 브레이크나 컨티뉴 문이 작동 해야 하는게 아닌가요? 왜 엔터를 쳐야 작동하는지 모르겠습니다. 또한 getchar함수는 한글자만 입력받는 것으로 알고 있는데 왜 문자열로도 작동이 될까요?
답변 1
0
scanf(), getchar(), gets() 함수들은 모두 Buffered I/O 방식을 채택하고 있는 표준 입력 함수입니다. 이 함수들은 사용자 입력 정보가 저장되는 버퍼가 비어 있으면 사용자로부터 입력을 받는데 입력의 끝을 엔터키 입력으로 판단합니다. getchar() 함수는 입력 버퍼에서 한 글자를 가져오는 함수입니다. 그러나 비어 있다면 엔터키를 포함해 사용자 입력을 문자열로 받습니다. 물론 한 글자만 입력 한 후 엔터키를 입력해도 무방합니다.
글자를 입력하는 순간 그 값을 알고 싶다면 Non-buffered I/O 방식을 사용하는 getch(), getche() 함수를 이용하면 되겠습니다. 다시 말씀드리지만... getchar() 함수는 한 글자를 입력 받는 함수가 아니라 입력 버퍼에서 한 글자를 가져오는 함수 입니다. 참고하시기 바랍니다. :)
scanf("%d\n") 의미
0
19
1
주소 연산자(&) 간접 지정자(*) 반대 개념
0
32
1
Virtual Memory, Memory, Memory mapping tables
0
50
1
샘플코드 출력 오류 발생 질문드립니다
0
62
2
값의 교환에 사용되는 변수의 위치.
0
87
2
메모리 비교에 관한 질문
0
80
2
문자열 Null
0
62
1
C, C++
0
87
2
문자열 입출력 코드 에러
0
60
2
선생님! 120화 2분 50초 질문입니다.
0
66
1
caller 가 메모리 할당 해제를 할 때의 문제점 질문
0
63
2
단축키 맞는지 여부 문의드립니다.
0
59
2
문자열을 사용하는 이중 포인터에 대하여 질문합니다
0
65
1
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
0
78
2
용어 설명 필요
0
56
2
stdin, stdout
0
70
2
필수 실습 (최댓값을 반환하는 함수)
0
92
2
아......ㅠㅠ
0
99
2
버퍼 내 엔터
0
71
1
2진수 뺄셈에서 carry-out
0
111
2
union 식별자는 실무에서 보통 어디에서 사용하나요?
0
79
2
필수실습문제 공부법 (진도 vs 복습)
0
103
2
예제파일 다운로드
0
78
2
Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?
0
118
3





