250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 휘발류
- ubuntu
- 가상머신
- 티스토리챌린지
- FreeBSD
- 에러
- VM
- K&R
- 일상
- node.js
- virtualmachine
- podman
- 잡담
- 템플릿
- Bloc
- 개발
- 인프라
- 객체지향프로그래밍
- 오블완
- 개발기
- 주유소
- Linux
- DART
- C언어
- 퇴근길
- 리눅스
- Flutter
- 오토바이
- VMware
- 연습문제
Archives
- Today
- Total
그냥저냥
문제풀이 | The C Programming Language (K&R): Exercise 1-6 본문
개발기/The C Programming Language
문제풀이 | The C Programming Language (K&R): Exercise 1-6
sync86 2026. 5. 23. 15:01728x90
반응형

책: The C Programming Language (K&R)
본문의 연습문제는 저작권 이슈로 그 내용을 직접적으로 언급하지 않습니다. 이점 양해 바랍니다.
Exercise 1-6. getchar() != EOF 확인하는 문제입니다.
1. 이 문제를 해결하는데 필요한 사전 정보
EOF (End of File)는 파일 끝을 의미합니다.
따라서 원래는 파일 입력을 받아야 하나, 책에서는 파일 입/출력을 하는 방법에 대해서는 언급하지 않았습니다.
때문에, UNIX의 기본 입출력 키보드 입력에 따라 파일을 입력해서 출력하는 방법으로 흉내를 내는 것 같습니다.
"모든 것은 파일이다."는 유닉스 철학이 있습니다. 이것은 키보드 입/출력력도 하나의 파일처럼 취급된다는 의미입니다.
운영체제마다 차이는 있겠지만, 키보드로 EOF를 표현하기 위한 방법은 아래와 같습니다.
- 유닉스/리눅스: CTRL+D
- 윈도우즈: CTRL+Z
2. 소스코드
#include <stdio.h>
/**
* copy input to output; 2nd version
*/
int main(int argc, char** argv){
int c = -1;
while ((c = getchar()) != EOF)
{
putchar(c);
}
/* c가 EOF인지 확인하기 위한 코드 */
if(c == EOF)
{
printf("%d %d\n", c, (c != EOF));
}
}
3. 실행 및 검증
$ ./a.out # 엔터 입력 후 CTRL+D 입력
-1 0
$
4. 마무리
이 책에서 연습문제에서는 0 또는 1인지 확인하라고 적혀있습니다. EOF의 표준이 바뀌었던 것인지는 확실하지 않지만 -1이 맞습니다.
다만 원래 이 프로그램의 의도는 입력한대로 출력해주는 용도입니다.
파일을 복제하는 예제인 것이죠.
키보드를 입력하고, CTRL+D(유닉스/리눅스 기준) 입력하면 문자열이 출력되고 종료될 것으로 예상되지만, 대기중입니다.
이것은 출력 버퍼와 상관있는 이야기입니다.
$ ./a.out
I'm a boy.I'm a boy.
아직까진 이 이야기에 대해서 언급된 내용은 아닙니다.
정상 동작이라는 가정으로 CTRL+D (유닉스/리눅스 기준) 한번 더 입력하면 아래와 같이 프로그램이 종료됩니다.
$ ./a.out
I'm a boy.I'm a boy.-1 0
$
다음은 Exercise 1-7 풀어보겠습니다.
728x90
반응형
'개발기 > The C Programming Language' 카테고리의 다른 글
| 문제풀이 | The C Programming Language (K&R): Exercise 1-7 (0) | 2026.05.24 |
|---|---|
| 문제풀이 | The C Programming Language (K&R): Exercise 1-5 (0) | 2026.05.04 |
| 문제풀이 | The C Programming Language (K&R): Exercise 1-4 (0) | 2026.05.04 |
| 문제풀이 | The C Programming Language (K&R): Exercise 1-3 (0) | 2026.04.28 |
| 문제풀이 | The C Programming Language (K&R): Exercise 1-2 (0) | 2026.04.28 |