C의 파일 끝(EOF)
저는 현재 Ritchie & Kernighan의 C Programming Language라는 책을 읽고 있습니다.그리고 나는 EOF의 사용에 대해 꽤 혼란스럽다.getchar()
기능.
먼저, EOF의 값이 -1인 이유와 EOF의 값이 왜getchar()!=EOF
0입니다. 질문이 있어서 죄송합니다만 정말 이해가 안 됩니다.정말 노력했는데 안 되네.
그리고 아래 코드를 사용하여 글자 수를 셀 수 있는 책에서 예제를 실행하려고 했는데, Enter 키를 눌러도 루프를 벗어날 수 없는 것 같아서 언제 EOF에 도달할 수 있을까요?
main(){
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
그리고 C의 EOF에 관한 문제에서도 같은 문제를 읽었습니다.대부분의 사람들은 EOF를 사용하는 대신 터미네이터 \n 또는 null 터미네이터 \0을 사용하는 것이 합리적이라고 조언했습니다.
책의 예가 다른 목적에 도움이 된다는 뜻인가요?
EOF는 "파일 끝"을 나타냅니다.줄바꿈(Enter 키를 눌렀을 때 발생하는 현상)은 파일의 끝이 아니라 줄바꿈이기 때문에 줄바꿈은 이 루프를 종료하지 않습니다.
코드는 틀리지 않습니다.예상대로 되지 않을 뿐입니다.입력의 끝까지 읽혀지지만, 행의 끝까지 읽기를 원하는 것 같습니다.
EOF의 값은 -1입니다.이것은, EOF는, 다음의 임의의 반환치와 다른 값으로 할 필요가 있기 때문입니다.getchar
그게 진짜 캐릭터예요.그렇게getchar
는 부호 없는 문자로 문자값을 반환하고 int로 변환합니다.따라서 음이 아닙니다.
터미널에서 입력하는 경우 파일 종료를 유발하려면 CTRL-D(유닉스 형식의 시스템) 또는 CTRL-Z(Windows)를 사용합니다.그리고 모든 입력을 읽은 후에getchar()
돌아온다EOF
, 그 때문에,getchar() != EOF
false가 되어 루프가 종료됩니다.
[*] 정수 오버플로로 인해 입력이 LONG_MAX 문자 이상일 경우 정의되지 않은 동작이 발생하지만 간단한 예에서는 이를 허용할 수 있습니다.
EOF는 -1로 정의되어 있습니다.이름은 사용자가 지정한 표준 라이브러리 헤더에 의해 지정됩니다.#include
실제 읽기 바이트로 오인할 수 없는 것이어야 하기 때문에 -1과 같습니다.getchar()
.getchar()
는 양수(0~255까지 포함)를 사용하여 실제 바이트 값을 보고하기 때문에 -1로 충분합니다.
!=
않다'를 뜻하고, 0은 '거짓, 그 거짓'을 뜻합니다. 거냐면요,는 '이것'이라고 부릅니다.getchar()
-1(EOF)으로 하다EOF를 사용하다 왜냐하면 같지 않은 것은 같지 않기 때문입니다.거짓이다을 사용하다
의 콜getchar()
EOF를 사용하다C에 관한 한, '표준 입력'(명령 창에 입력하여 프로그램에 제공하는 데이터)은 파일과 같습니다.물론, 언제든지 더 많이 입력할 수 있으므로 "난 끝났어"라고 명확하게 말할 수 있는 방법이 필요합니다.Windows 컨트롤 Z 컨트롤Unix 컨트롤 D 컨트롤
이 책의 예는 "잘못된" 것이 아니다.당신이 실제로 무엇을 하고 싶은지에 따라 다릅니다.EOF까지 읽는다는 것은 사용자가 "다 읽었습니다"라고 말할 때까지 모든 것을 읽는다는 것을 의미하며, 그 후에는 더 이상 읽을 수 없습니다.'\n'까지 읽으면 입력 행을 읽습니다.명령 프롬프트에서 키보드로 이 바이트를 생성하는 것은 어렵거나 불가능하기 때문에 사용자가 입력을 입력하기를 기대하는 경우 '\0'까지 읽는 것은 좋지 않습니다.
질문이 너무 많네요.
★★★★
EOF
에, 「라고 하는 는 -1: 「POSIX」의 -1이라고 됩니다.연산 포함TRUE인 반환하고인 경우 0을 TRUE는 1로 FALSE는 0으로 설정합니다.
getchar() != EOF
0
(FALSE를 ),getchar()
EOF
.에뮬레이트하기
EOF
에서 읽을 때stdin
누르다
언급URL : https://stackoverflow.com/questions/4358728/end-of-file-eof-in-c
'programing' 카테고리의 다른 글
URL 작성 및 파라미터에서 Vue.js Vuex 상태 설정 (0) | 2022.07.03 |
---|---|
Google Auth Signin을 사용한 Vuejs 글로벌 함수 (0) | 2022.07.03 |
악용 코드의 포인터 설명 (0) | 2022.07.03 |
v-for 루프 내의 로더와 함께 Vuetify v-btn 사용 (0) | 2022.07.02 |
jar-file을 실행할 수 없습니다: "기본 매니페스트 특성이 없습니다. (0) | 2022.07.02 |