2016-03-21 181 views
-1

在Linux操作系統Ubuntu 14.04裏面「如果循環」,我想計數輸入的線路:打印纔有一次「while循環」

#include <stdio.h> 
/*count lines in input*/ 

main() 
{ 
    int c, nl; 

    nl = 0; 
    while ((c = getchar()) != EOF) { 
     if (c == '\n') 
      nl = nl + 1; 
     printf("input lines are %d\n", nl); 
    } 
} 

輸出卻是:

asdsadsa 
input lines are 0 
input lines are 0 
input lines are 0 
input lines are 0 
input lines are 0 
input lines are 0 
input lines are 0 
input lines are 0 
input lines are 1 
asdasd 
input lines are 1 
input lines are 1 
input lines are 1 
input lines are 1 
input lines are 1 
input lines are 1 
input lines are 2 
+0

正確地設置代碼的格式。提交前請檢查預覽窗格,並在編輯時閱讀「如何格式化」方框 –

+4

輸出看起來對輸入和代碼是正確的,您還應該解釋您期望看到的內容以及您實際看到的內容有何不同 –

+1

'if'不是循環/迭代語句。並且使用非原型聲明器已被棄用。 – Olaf

回答

1

你錯過了一些大括號。

if (c == '\n') { 
    nl = nl + 1; 
    printf("input lines are %d\n", nl); 
} 

通過不擁有它們,那麼只有nl增量受到if語句的影響,並且您希望兩者都有效。

+0

多個*括號*。 – EOF

+1

'{''}'通常被稱爲*大括號*。 「圓括號」僅指圓括號'()'。 –

+1

@EOF:其實[_braces_](http://port70.net/~nsz/c/c11/n1570.html#6.1p1)。 – Olaf

1

沒有你的期望,我只能猜測它:

您可能希望這樣(你必須使用Ctrl + d來表示輸入的結尾):

#include <stdio.h> 
/*count lines in input*/ 

int main() 
{ 
    int c, nl; 

    nl = 0; 
    while ((c = getchar()) != EOF) { 
     if (c == '\n') 
      nl = nl + 1; 
    } 
    printf("input lines are %d\n", nl); 
} 

還是這個(絕版在輸入行後立即):

#include <stdio.h> 
/*count lines in input*/ 

int main() 
{ 
    int c, nl; 

    nl = 0; 
    while ((c = getchar()) != EOF) { 
     if (c == '\n') 
     { 
      nl = nl + 1; 
      printf("input lines are %d\n", nl); 
     } 
    } 
}