programing

EOF를 C코드로 나타냅니까?

kingscode 2022. 7. 12. 23:28
반응형

EOF를 C코드로 나타냅니까?

줄바꿈 문자는 다음과 같이 표시됩니다."\n"C코드입니다.파일종료(EOF) 문자와 동등한 문자가 있습니까?

EOF는 (대부분의 최신 운영체제에서) 문자가 아닙니다.이는 단순히 스트림의 끝에 도달했을 때 파일 스트림에 적용되는 조건입니다.사용자가 특수 문자(Unix, Linux 등에서는 Control-D )를 입력하여 콘솔 입력을 위한 EOF 신호를 보낼 수 있지만, 이 문자는 실행 중인 프로그램에 의해 인식되지 않고 운영 체제에 의해 포착되어 프로세스에 EOF 신호를 보내기 때문에 혼란이 발생합니다.

주의: 일부 매우 오래된 운영체제에서는 EOF는 CP/M의 Control-Z와 같은 문자였지만 파일 시스템 디렉토리의 실제 파일 길이를 유지하기 위한 오버헤드를 피하기 위한 조잡한 해킹이었습니다.

EOF캐릭터가 아닙니다.그럴 수 없습니다. (이진수) 파일에는 임의의 문자를 포함할 수 있습니다.0 1 2 3 ... 255 바이트와 다시 0 1 ... 255 바이트로 계속 증가하는 바이트를 가진 파일이 있다고 가정합니다.256바이트 중 어느 것이든 가능한 것으로 간주됩니다.EOF파일이 짧게 잘라집니다.

그래서...getchar()등을 반환하다int가능한 반환값의 범위는 다음과 같습니다.char가질 수 있다, 그리고 진품int가치EOF(정의:stdio.h이 때문에, 반환치를 Return 값으로 변환합니다.char 확인하기 전에EOF동작하지 않습니다.

일부 프로토콜에는 "EOF" "문자"가 있습니다. ASCII에는 "텍스트 끝", "전송 끝", "전송 블록 끝", "미디어 끝"이 있습니다.다른 답변에서는 오래된 OS에 대해 언급하고 있습니다.저는 Linux에서 ^D를 입력하고 Windows 콘솔에서 ^Z를 입력하여 프로그램 입력을 중지합니다(그러나 파이프를 통해 읽은 파일은 어디에든 ^D 및 ^Z 문자를 사용할 수 있으며 바이트가 부족할 때만 EOF를 나타냅니다).C 문자열은 다음과 같이 끝납니다.'\0'하지만 그것은 또한 그들이 그 문자를 포함할 수 없다는 것을 의미한다.'\0'그렇기 때문에 모든 C 비문자열 데이터 함수는 다음 명령어를 사용하여 동작합니다.char(데이터를 포함) 어레이와size_t(데이터의 끝부분을 알 수 있습니다).

편집: C99 표준 제7.19.1.3항은 다음과 같이 기술되어 있습니다.

매크로는 [...]입니다.
EOF
이것은 정수 상수 표현으로 확장됩니다.int그리고 음수 값, 즉 스트림에서 더 이상 입력되지 않음을 나타내기 위해 여러 함수에 의해 반환된다.

아니요. EOF는 문자가 아니라 파일 핸들 상태입니다.

ASCII 문자 집합에는 데이터의 끝을 나타내는 제어 문자가 있습니다만, 이러한 문자는 일반적으로 파일의 끝을 나타내는 데 사용되지 않습니다.예를 들어, 경우에 따라서는 거의 같은 신호를 보내는 EOT(^D)입니다.

표준 C 라이브러리가 부호 있는 정수를 사용하여 문자를 반환하고 파일 끝에 -1을 사용하는 경우 이는 오류가 발생한 것을 나타내는 신호일 뿐입니다.C 스탠다드는 없지만 SUSv3를 인용하면 다음과 같습니다.

스트림의 파일 종료 인디케이터가 설정되어 있는 경우 또는 스트림의 파일 종료 인디케이터가 설정되어 fgetc()가 EOF를 반환합니다.읽기 오류가 발생하면 스트림의 오류 표시기를 설정하고 fgetc()는 EOF를 반환하며 오류를 나타내기 위해 errno를 설정해야 합니다.

EOFWindows(및 MSDOS, CP/M)에서 명령어 인터프리터가 인식하는 문자는 0x1a(10진수 26, aka +Z aka SUB)입니다.

, 이 수 할 수 이 「」로 는, 「」, 「」, 「」로 개시합니다."Some description\x1a"는 파일 수 .TYPE됩니다.EOF 문자(예: 일부 설명을 인쇄하고 다음 가비지를 계속하는 대신 중지)를 선택합니다.

댓글은 다 읽었어요.이것을 인쇄하면 어떤 일이 일어나는지 알 수 있습니다.

printf("\nInteger =    %d\n", EOF);             //OUTPUT = -1
printf("Decimal =    %d\n", EOF);               //OUTPUT = -1
printf("Octal =  %o\n", EOF);                   //OUTPUT = 37777777777
printf("Hexadecimal =  %x\n", EOF);             //OUTPUT = ffffffff
printf("Double and float =  %f\n", EOF);        //OUTPUT = 0.000000
printf("Long double =  %Lf\n", EOF);            //OUTPUT = 0.000000
printf("Character =  %c\n", EOF);               //OUTPUT = nothing

여기서 알 수 있듯이 EOF는 문자가 아닙니다.

저는 EOF 신호에 대해 많은 연구를 해왔습니다.Dennis Ritchie의 C 프로그래밍에 관한 책에서는 putchar() 및 getchar() 명령어를 도입할 때 처음 볼 수 있습니다.기본적으로 문자열 입력의 끝을 표시합니다.

예를 들어, 두 개의 숫자 입력을 찾고 그 합계를 출력하는 프로그램을 작성합시다.숫자를 입력할 때마다 Enter 키를 눌러 iput 액션을 완료했다는 신호를 표시합니다.그러나 문자열로 작업하는 동안 Enter는 다른 문자 ['\n': newline character]로 읽힙니다.입력 종료를 표시하려면 완전히 새로운 행에 ^Z(키보드에서는 Ctrl + Z)를 입력한 후 입력합니다.그러면 다음 명령줄이 실행되도록 신호입니다.

#include <stdio.h>

int main()
{
char c;
int i = 0;
printf("INPUT:\t");
c = getchar();

while (c != EOF)
{
   ++i;
   c = getchar();
   
};

printf("NUMBER OF CHARACTERS %d.", i);

return 0;}

위는 '\n'(newline), '\t'(space) 문자를 포함한 문자 수를 세는 코드입니다.줄 바꿈 문자를 세지 않는 경우는, 다음의 순서에 따릅니다.

#include <stdio.h>

int main()
{
char c;
int i = 0;
printf("INPUT:\t");
c = getchar();

while (c != EOF)
{
    if (c != '\n')
    {
        ++i;
    }

    c = getchar();
    };

printf("NUMBER OF CHARACTERS %d.", i);

return 0;}. 

이제 메인 생각의 조언이 필요합니다.IT의 심플함: 원하는 스토리를 모두 쓴 후 새로운 행으로 이동하여 ^Z를 입력한 후 다시 입력합니다.

가 있을 것 중 는 그냥 입니다.printf

#include <stdio.h>
int main(void)
{
    printf("%d", EOF);
    return 0;
}

및 에서 이 했습니다.-1콘솔로 출력되었습니다.이게 도움이 됐으면 좋겠다.

이것은 시스템에 의존하지만 종종 -1입니다.여기를 참조해 주세요.

EOF 값은 실제 문자와 혼동할 수 없습니다.

ifa= getchar()agetchar()이렇게 하다. 쓰면 안 .chara문자 외에 EOF를 포함할 수 있을 정도로 커야 합니다.

대답은 '아니오'지만...

이 에 헷갈릴 수도 있어요.fgets()

http://www.cplusplus.com/reference/cstdio/fgets/ 에서 :

스트림에서 문자를 읽고 (num-1) 문자를 읽거나 줄바꿈 또는 파일 끝에 도달할 때까지 스트링에 C 문자열로 저장합니다.

있다EOFstdio에 h에 있습니다.표준으로 지정된 동등한 문자 리터럴이 없습니다.

언급URL : https://stackoverflow.com/questions/12389518/representing-eof-in-c-code

반응형