5

getchar()ユーザーからの文字入力の読み取りに使用することに疑問があります。

char char1, char2;
char1 = getchar();
char2 = getchar();

2ユーザーからの入力としてcharを取得する必要があります。この場合、ユーザーが文字の'A'後にnewline。、次に文字を入力'B'すると、何が格納されますか?char2それは改行文字ですか、それとも文字'B'ですか?

WindowsのCodeBlocksで試してみて、char2実際には改行文字を格納しましたが、文字を格納することを意図していました'B'

期待される動作が何であるか、そしてそれがコンパイラに依存しているかどうかを知りたいだけですか?もしそうなら、ターボCとmingWの間にどのような違いがありますか?

4

4 に答える 4

10

はい、各入力の後に改行を消費する必要があります。

char1 = getchar();
getchar(); // To consume `\n`
char2 = getchar();
getchar(); // To consume `\n`

これはコンパイラに依存しません。これは、各入力行の終わりにキャリッジリターンがあるため、すべてのプラットフォームに当てはまります(ただし、実際の改行はプラットフォームによって異なる場合があります)。

于 2012-09-22T13:19:35.127 に答える
0

期待される動作が何であるか、そしてそれがコンパイラに依存するかどうかを知りたいだけですか?

これは予想される動作であり、コンパイラに依存しません。

scanfAの後に改行、次にBの後に改行を読み取るために使用できます。に固執したい場合はgetchar()、単に入力を。として指定しABます。

于 2012-09-22T13:18:42.777 に答える
0

改行を明示的にテストすることで、改行の読み取りを防ぐことができます。単に使用する代わりに

getchar():

あなたはこのようなものを使うことができます

while((char1 = getchar()) == '\n');

Windowsを使用している場合は、「\r」もテストすることをお勧めします。そのため、コードが少し変更されます。

while((char1 = getchar()) == '\n' || char1 == '\r');
于 2012-09-22T15:55:05.923 に答える
-2

fflush(stdin);ステートメントの間にステートメントを追加します。これを見てください

ch1=getchar();

fflush(stdin);
ch2=getchar();
于 2012-09-22T13:43:58.903 に答える