2017-03-11 5 views
-2

に苦しんこれは私の単純なコードです:私はCとGETCHAR(に新しいです)と出力

#include <stdio.h> 

int main() 
{ 
    char c; 
    int i; 

    for(i=1;i<11;i++) 
    { 
     printf("\nEnter the character:"); 
     c = getchar(); 
    } 
    printf("%c",c); 

    return 0; 
} 

出力は次のとおりです。

like that

私はちょうど10個の文字を入力したいです最後のものだけを印刷します。 なぜこのような出力が得られますか?

ありがとうございます。

+1

'getchar()'を使用して改行を消費するか、改行なしですべての文字を入力します。 –

+0

上記のコメントを参照してください。回答者はこの明白な重複に答えることを控えます。いくつかのゴールドバッジの所有者はこれを閉じてください... –

+0

['getchar'はintを返します](http://stackoverflow.com/questions/35356322/difference-between-int-and-char-in-getchar-fgetc-and- putchar-fputc) –

答えて

0

キーボードで文字を入力すると、文字でカウントされるEnterキーで検証します。したがって、入力は実際に入力のペアであり、10番目の文字は改行であるため、これは表示されません。

12345678901と入力してテストし、Enterキーで検証できます。

$ ./printf 

Enter the character:12345678901 

Enter the character: 
Enter the character: 
Enter the character: 
Enter the character: 
Enter the character: 
Enter the character: 
Enter the character: 
Enter the character: 
Enter the character:0 

この種の問題を見つける方法はいくつかあります。まず、デバッグのために文字や文字列を出力するときには、それをいくつかの文字で囲んで、それがまったく表示されているかどうかを確認する必要があります。同様に:

printf("'%c'", c); 

第二に、あなただけのcは、実際にあなたが得ているかを見るためにあなたのループの最後で別のprintfを追加している可能性があります。ここでは、それぞれの時間を入力して押し、次に文字を入力することで得るものです:

$ ./printf 

Enter the character:1 
'1' 

Enter the character:' 
' 

Enter the character:2 
'2' 

Enter the character:' 
' 

Enter the character:3 
'3' 

Enter the character:' 
' 

Enter the character:4 
'4' 

Enter the character:' 
' 

Enter the character:5 
'5' 

Enter the character:' 
' 
' 
' 

あなたがするたびに入力する文字を表示し、入力して検証し、cが文字である場合、入力は、「スキップ」であり、C改行文字で、実際には5回だけ入力できます。

問題は、ユーザーが入力ごとに複数の文字を入力できないようにすることができないことです。したがって、10個の入力シーケンスを持つことが目的で、10番目の入力シーケンスの最初の文字だけを取得する場合は、入力シーケンスの最初の文字を取得し、新しい行が得られるまで入力を読み取るようにしてください。

#include <stdio.h> 

int main() 
{ 
     char c; 
     int i; 

     for(i=0 ; i<10 ; i++) 
     { 
       printf("\nEnter the character:"); 
       c = getchar(); 
       while (getchar() != '\n'); 
     } 
     printf("%c",c); 

     return 0; 
} 
+0

whileループがforループにどのような影響を与えるか説明してください。 –

+0

getchar()を呼び出すと、入力バッファが空の場合にテキストを入力するように求められます。このテキストはバッファに送られ、Enterキーを押すとgetchar()コールに返されます。 getchar()関数は最初の文字を返しますが、残りの文字はバッファ(改行を含む)に残ります。このwhileループはバッファから文字を1つずつ取得し、改行を読み込むと停止します。 – Tom

+0

whileループで読み込んだ文字の値を実際に保持する必要がないため、dを削除しました。簡単にするために、このコードはEOFまたは読み取りエラーをチェックしません。 – Tom

関連する問題