2016-08-28 12 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

長い文字列を入力してください。私の推測では、1つのエクストラが常に表示されます(つまり、ABCDと入力すると1 2 3 4 5になります)。 – FDavidov

+1

あなたは2文字を入力したので、改行おそらく –

+0

私はあなたが 'y'を押すだけではなく、その後に別の文字を押したと思います。 –

答えて

2

を取得します。正しい結果を得たい場合は改行文字を無視するか、ncを1だけ減らしてください。

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

更新されたコードは、あなたが唯一の目に見えるバイトをカウントしたい場合は、isprint機能を使用することができますバック0

+0

なぜ '... nc = 1;'? – alk

+0

ええ、そうですね。私のコードを別のもので混乱させました。ありがとう!私はそれを修正します。 –

+0

'' '++ nc;' ''。構文の問題を修正してください。 :) –

3

「文字」を入力しました。 A yと改行文字です。それは2です。

0

Enterキーを押すと文字と見なされます

1

2文字を入力したためです。 1つはyで、もう1つは\n(改行)です。

したがって、あなたは、私はあなたが知らなかったが、Enterキーを押すとあなただけの改行文字や'\n'を挿入するとし、出力1と2

0

にあなたのカウンタをリセットします:さらに良いコード

#include <stdio.h> 

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

これは、バイトが印字可能か空白かを返します。それはこのように書きます:以来、Cには、charは、Unicode文字が、しばしばただのバイトではありません

#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; 
} 

注意例は、キリル文字を絵文字ため、このプログラムは、中国の2以上のバイトなど一部の文字を数え表意文字。

関連する問題