2016-11-05 99 views
1

這裏是我的鍛鍊1-13碼的「C程序設計語言」: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運行它,但是當我按「Enter」開始新行('\ n')運行printf()和putchar()函數(並且''或'\ t'都不會觸發輸出)。 while循環沒有結束(它會像END-OF-FILE(CTRL-D)那樣結束),但我想知道爲什麼這些函數在被調用時會被調用。它可以防止一次輸入多行。下面是一個例子的它的輸出:

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()的輸出,當我按下「Enter」鍵。 CTRL-D只是結束循環和程序。

+0

您使用的是Windows嗎?它有不同的結局。它使用'\ r \ n' – Mark

+0

不,我在Ubuntu 16.04上。 – jestivus

回答

0

ENTER釋放緩衝區。

直到輸入數據不可用於您的代碼。您的代碼可以同時獲取所有字符。

操作系統負責維護緩衝區(您可能可以更改此操作系統的這一方面)。

0

在c中,任何輸出(除非另有特別設置)都被緩衝。

沒有什麼輸出直到發生以下情況之一:

  1. fflush()稱爲
  2. 一個 '\ n' 爲所述緩衝器被填充輸出

,所以你可以在調用後添加調用flush()printf()

注:還有其他的單詞分隔符,你或許應該尋找的,不是製表符,空格,換行等。建議添加:單引號,雙引號,句點,冒號,分號,左paren,左大括號,右paren,右大括號,返回打勾。

相關問題