2016-08-28 46 views
-2

下面的C程序是計算字符計數。字符計數C

#include <stdio.h > 
int main() 
{ 
    int nc = 0; 
    while (getchar() != EOF) 
    { 
     ++nc; 
     printf("%d\n", nc); 
    } 
    return 0; 
} 

當我在終端中輸入字符,例如「Y」,該輸出返回如下

1 
2 

這如何發生的計算以及爲什麼2是在輸出?

+0

嘗試輸入更長的字符串。我的猜測是你總會看到ONE EXTRA(即如果你輸入ABCD,你會得到1 2 3 4 5)。 – FDavidov

+1

因爲你輸入了兩個字符 - 換行符或許是 –

+0

我敢打賭,你不是隻推'y',而是你之後推了另一個字符。 –

回答

2

我想你不知道,但是當你按下輸入你剛纔插入一個換行符或'\n'。如果你想得到正確的結果,可以忽略換行符,或者減少nc。

#include <stdio.h> 

int main() 
{ 
    int nc = 0; 
    while (getchar() != EOF) 
    { 
    ++nc; 
    printf("Character count is:%d\n", nc - 1); 
    } 
    return 0; 
} 

更妙的是代碼:

#include <stdio.h> 
int main() 
{ 
    int nc = 0; 
    for(;;) 
    { 
    do 
     ++nc; 
    while (getchar() != '\n'); 
    printf("Character count is:%d\n", nc - 1); 
    nc = 0; 
    } 
} 

更新的代碼將重置回你的計數器爲0

+0

爲什麼'... nc = 1;'? – alk

+0

是的,你說得對,我把我的代碼搞亂了。謝謝!我會解決它。 –

+0

'''++ nc;'''。糾正語法問題。 :) –

3

您輸入了「一個字符」。 A y和換行符。這是2.

0

當你按下輸入它被認爲是一個字符

1

因爲你輸入了兩個字符。一個是y,另一個是\n(換行)字符。

因此,你得到的輸出1和2

0

如果你想只計算可見字節,可以使用isprint功能,它返回一個字節是可打印的還是空格字符。它是這樣的:

#include <ctype.h> 
#include <stdio.h> 

int main() 
{ 
    int nc = 0; 
    int ch; 

    while((ch = getchar()) != EOF) 
    { 
    if (isprint(ch) && ch != ' ') 
     ++nc; 
    printf("Character count after reading '%c' is %d.\n",ch, nc); 
    } 
    return 0; 
} 

應當注意,由於C,一個char不是一個Unicode字符,但往往只是一個字節,這種方案計算的某些字符爲2個或更多字節,例如表情符號,西裏爾字母,中國象形文字。