2016-10-22 9 views
1

私はCを学んでいます。私はLinux端末を使用しています。私は次の簡単なコードを書いていますが、入力をタイプすると、ファイルは終了せず、したがって文字の数はカウントされません。誰もそれで私を助けることができますか?他の入力コードも試してみました。これは、すべての入力関連コードと同じです。私は間違って何をしていますか?助けてください。入力がcで終了しないため、出力が機能しません

main() 
{  
    /* count characters in input */  
    printf("Type some characters and the program will count the number of characters: "); 

    int c = getchar(); 

    while(c!=EOF && c!= '\n')  
     ++c; 

    printf("Number of characters typed: %1d\n", c);  
} 
+3

「getchar」を1回だけ呼び出すと、1つの文字が読み込まれます。あなたは 'EOF'(または' \ n'またはあなたの停止条件、何とか 'while((c = getchar())!= EOF)'に遭遇しない限り、それを繰り返し呼び出す必要がありますか? – jpw

+0

このgetchar()関数?入力を取る方法は、入力を受け取り変数** buffer **内でコピーするscanf( "%s"、バッファ)を通じたものです。 – Yvain

+2

@Yvain 'getchar'は標準関数として定義されていますstdio.h; OPがcharによってcharを読み込もうとしている場合、scanf( "%s")は実際には適切ではありません。 – jpw

答えて

0

有用なコメントに注目してください。

#include <stdio.h> 

int main(){ 
     int c; 
     int count = 0; 

     while((c=getchar()) != '\n' && c != EOF) 
       count++; 
     printf("%d\n", count); 
}; 

このコードは期待どおり動作します。

+0

while((c = getchar())!= '\ n' || c!= EOF) 'を使うべきですか? '\ n''と' EOF'さえもすべての文字がどちらとも等しくなく、条件が常に真になるので、無限ループではないでしょうか? – alvits

+0

いいえ、このループは、「入力された文字が** **改行でも** 'EOF'でもない限り、置換されていれば "入力がそうでない限り'newline' ** 'EOF'との組み合わせ** "、これは決して本当に止まらないでしょう。 – Yvain

+0

あなたは間違ったバディーを持っています。 'c'が' \ n'であるとしましょう。あなたの状態は 'while(' \ n '!=' \ n '!' '\ n'!= EOF) '===>' while(false || true) '===>' while(true ) '。 while(true || false) '===>' while(EOF!= EOF!= EOF) '===>本当) '。それ以外は 'while(true || true)'です。ループはいつ終了するのですか?ここでコードの評価を入力しなければならないとは思えません。 – alvits

関連する問題