기본적으로 stdin
은 버퍼링 된 입력입니다. 10어쨌든 stdin 버퍼를 들여다 볼 수 있습니까?
int main()
{
char c[10] = {'\0'};
scanf("%9s", c);
printf("%s, and left is: %d\n", c, getchar());
return 0;
}
안녕하세요
안녕하세요
./a.out, 왼쪽 : 같은scanf()
로 그 증거는stdin
의 "데이터를두고"메커니즘의의 사용에 물론
10
되는 줄 바꿈 ...
난 항상에서 "슬쩍"어쨌든이, 호기심 봤는데 stdin
버퍼가 없어도 버퍼가 있습니까?
편집
더 좋은 예는 다음과 같을 수 있습니다 "at.ct"의 입력으로
scanf("%9[^.]", c);
, 지금은 stdin
에 남아있는 "데이터"(ct\n
), 그냥 줄 바꿈이있다.
엿보기 후에'ungetc()'할 수 있습니다. 충분하다? –
@DanielFischer - 나쁘지 않은가 보군 ... 전체 인물이 남아 있다면 어떻게 될까? stdin에 남아있는 데이터의 길이를 알 수 있습니까? 아니면 하나 이상의 문자를'ungetc() '할 수 있습니까? – Mike
"푸시 백의 한 문자가 보장됩니다. 'ungetc' 함수가 동일한 스트림에서 너무 자주 호출되어 해당 스트림에서 읽기 또는 파일 위치 지정 작업을 수행하지 않으면 작업이 실패 할 수 있습니다." 일반적으로 둘 이상을 ungetc 할 수 있지만 단 하나만 보장됩니다. –