programing

getchar()는 입력 문자열과 동일한 출력을 제공합니다.

newsource 2022. 7. 30. 19:20

getchar()는 입력 문자열과 동일한 출력을 제공합니다.

K&R에 언급된 프로그램 때문에 혼란스럽습니다.getchar(). 입력 문자열과 동일한 출력을 제공합니다.

#include <stdio.h>

main(){
    int c;
    c = getchar();
    while(c != EOF){
         putchar(c);
         c = getchar();
    }
}

왜 전체 문자열을 인쇄하는 거죠?문자를 읽고 다시 입력을 요구할 것으로 예상합니다.

그리고 입력하는 문자열은 모두 EOF로 끝납니까?

사용하고 있는 심플한 설정에서는,getchar버퍼링된 입력으로 동작하기 때문에 getchar가 읽을 내용을 얻기 전에 Enter 키를 눌러야 합니다.문자열은 다음에 의해 종료되지 않습니다.EOF; 사실,EOF는 실제로는 문자가 아니라 파일의 끝을 나타내는 매직 값입니다.그렇지만EOF는, 읽어낸 문자열의 일부가 아닙니다.그게 뭐냐면getchar읽을 것이 남아 있지 않으면 반환됩니다.

기본 버퍼/스트림은 다음과 같습니다.getchar()친구들도 읽어주고텍스트를 입력하면 텍스트는 버퍼에 저장됩니다. getchar()한 번에 한 글자씩 스트리밍할 수 있습니다.읽을 때마다 버퍼 끝에 도달할 때까지 다음 문자가 반환됩니다.후속 문자를 요구하지 않는 이유는 버퍼에서 다음 문자를 가져올 수 있기 때문입니다.

스크립트를 실행하고 직접 입력하면 +(파일 끝)를 D누를 때까지 입력을 요구하는 프롬프트가 계속 표시됩니다.이렇게 부르면./program < myInput어디에myInput데이터가 포함된 텍스트 파일입니다.EOF입력의 끝에 도달했을 때. EOF는 스트림에 존재하는 문자가 아니라 입력의 끝에 도달했음을 나타내는 sentinel 값입니다.

추가 경고로, 제 생각엔getchar()또한 돌아올 것이다EOF에러가 발생했을 경우는, 체크할 필요가 있습니다.ferror()아래 예(테스트는 하지 않았지만 이해하실 수 있습니다)

main() {
    int c;
    do {
        c = getchar();
        if (c == EOF && ferror()) {
            perror("getchar");
        }
        else {
            putchar(c);
        }
    }
    while(c != EOF);
}

문자열, 기준C정의, 에 의해 종료됩니다.'\0'당신은 없다."C strings"를 참조해 주세요.

프로그램이 표준 입력(키보드)에서 문자(ENTER까지 버퍼링됨)를 읽고 표준 출력(화면)에 다시 씁니다.이 기능은 사용자가 입력한 문자 수나 이 작업을 수행하는 시간에 관계없이 수행됩니다.

프로그램을 중지하려면 표준 입력에 데이터가 더 이상 없음을 표시해야 합니다(네?). 키보드에 데이터가 없을 있습니까?)

+ (Unix) Z또는 + (Windows)를 D누르면 파일이 종료된 것처럼 보일 수 있습니다.
+(또는 +)Z는 실제 문자 수가 아닙니다Ctrl.DC그 말의 의미

리다이렉션을 , ""는 ""를 합니다.EOF할 수 있는 .
./a.out < source.c

getchar()입력의 단일 문자를 읽고 해당 문자를 함수의 값으로 반환합니다.getchar()는 특별한이 값은 「알겠습니다」로 됩니다.EOF.

getchar()표준 입력에서 문자를 읽습니다.도 ★★★★★★★★★★★★★★★.stdin.키보드는 않을 수 .getchargetchar를 「」로서 합니다.stdin한 번에 한 글자씩 읽습니다.의 , ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★EOF , . . . . . . . .getchar ★★★★★★★★★★★★★★★★★」putchar여러 번 실행되며 문자열 전체가 한 번에 인쇄되는 것처럼 보입니다.만 바꾸면 할 수 있을 거예요.

putchar(c);
printf("\n");     
c = getchar();

이제 출력을 원래 코드와 비교합니다.

하나의 예는 ' 낫다'의 해 줄 입니다.getchar 버퍼링되어 있습니다.stdin

void main(){
int c;
printf("Enter character");
c = getchar();
putchar();
c = getchar();
putchar();
}

첫 번째 대소문자에 두 글자를 입력합니다. 로 ★★★★★★★★★★★★★★★★★★★.getchar행행 중중 문??, 니, 래putchar

이는 궁극적으로 버퍼가 존재함을 의미하며 사용자가 무언가를 입력하고 Enter를 클릭할 때마다 버퍼에 저장된다. getchar는 이 를 「버퍼」로서 합니다.stdin.

언급URL : https://stackoverflow.com/questions/3676796/getchar-gives-the-same-output-as-the-input-string