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
.키보드는 않을 수 .getchar
getchar
를 「」로서 합니다.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
'programing' 카테고리의 다른 글
Vuetify Carousel 구성 요소의 오른쪽/왼쪽 화살표를 켜고 끄는 방법 (0) | 2022.07.30 |
---|---|
사용하시는 어플리케이션에서 sql과 sql의 계산을 실행하는 경우의 장점과 단점은 무엇입니까? (0) | 2022.07.30 |
Log4j 로거 프로그래밍 설정 (0) | 2022.07.30 |
@JsonProperty 속성은 언제 사용되며 어떤 용도로 사용됩니까? (0) | 2022.07.30 |
Vue.js에서 속성과 메서드를 재정의하는 적절한 방법? (0) | 2022.07.30 |