2016-11-05 1 views
1

는 여기에 "C 프로그래밍 언어"에 운동 1-13 내 코드입니다 :C :이 코드에서 "Enter"키가 출력되는 이유는 무엇입니까?

#include <stdio.h> 

int main() 
{ 
    int c, currentIndex, currentLength; 

    currentLength = currentIndex = 0; 

    while ((c = getchar()) != EOF){ 
     if (c == '\t' || c == '\n' || c == ' '){ 
      if (currentLength == 0){ 
       continue; 
      } 

      printf("Length of word %d: ||", currentIndex); 

      for (int i = 0; i < currentLength; i++){ 
       putchar('-'); 
      } 
      putchar('\n'); 

      currentLength = 0; 
      ++currentIndex; 
     } else { 
      ++currentLength; 
     } 
    } 

    return 0; 
} 

그래서 나는이를 컴파일하고 ./a.out으로 실행할 수 있습니다,하지만 난 누를 때 시작 "입력" 새로운 입력 행 ('\ n')은 printf() 및 putchar() 함수를 실행합니다 (출력을 트리거하는 '또는'\ t '도 없음). while 루프는 끝나지 않습니다 (END-OF-FILE (CTRL-D)와 같이 종료됩니다). 그러나 나는 왜 이러한 함수가 호출되는지 궁금합니다. 한 번에 여러 줄의 입력을 방지합니다. 이 출력의의 여기 예입니다 : 나는 "Enter"를 누르면

how long are these words 
    Length of word 0: ||--- 
    Length of word 1: ||---- 
    Length of word 2: ||--- 
    Length of word 3: ||----- 
    Length of word 4: ||----- 

그냥 명확하게하기 위해, 나는 단지의 printf()와 putchar()의 출력을 얻을. CTRL-D는 루프와 프로그램을 종료합니다.

+0

Windows를 사용하고 있습니까? 다른 줄 끝이 있습니다. 그것은'\ r \ n'을 사용합니다. – Mark

+0

아니요, 우분투 16.04입니다. – jestivus

답변

0

ENTER가 버퍼를 해제합니다.

ENTER까지 데이터를 코드에서 사용할 수 없습니다. 귀하의 코드는 동시에 모든 문자를 가져옵니다.

운영 체제가 버퍼를 관리합니다 (OS의이 측면을 변경할 수 있음).

0

(c), 출력은 (특별히 설정하지 않는 한) 버퍼링됩니다. 다음 중 하나가 발생할 때까지

아무것도 출력되지 :

  1. fflush()
  2. 은 '\ n을'
  3. 버퍼가 가득 출력
  4. 이다라고한다.

그래서 당신은 printf()

참고 호출 후 flush()에 전화를 추가 할 수 있습니다 탭, 공백, 줄 바꿈 이외 당신은 아마 찾고해야 다른 단어 분리기가있다.

제안 사항 : 작은 따옴표, 큰 따옴표, 마침표, 콜론, 세미콜론, 왼쪽 괄호, 왼쪽 중괄호, 오른쪽 중괄호, 오른쪽 중괄호, 뒤로 틱.