キーボードで文字を入力すると、文字でカウントされる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;
}
出典
2017-03-11 08:13:06
Tom
'getchar()'を使用して改行を消費するか、改行なしですべての文字を入力します。 –
上記のコメントを参照してください。回答者はこの明白な重複に答えることを控えます。いくつかのゴールドバッジの所有者はこれを閉じてください... –
['getchar'はintを返します](http://stackoverflow.com/questions/35356322/difference-between-int-and-char-in-getchar-fgetc-and- putchar-fputc) –