についてはたくさんの質問があることは承知していますが、scanf
それでも聞きたいことがあります。誰かがこの問題のルールまたは原則を説明してくれることを願っています:
最初のコード:
#include <stdio.h>
int main()
{
int c = 'W';
while(c != 'F'){
scanf("%c",&c);
printf("c is : %c\n",c);
}
return 0;
}
出力は次のとおりです。
E
c is : E
c is : <--newline
G
c is : G
c is : <---newline again
W
c is : W
c is : <---newline
F
c is : F
さて、今でも理解できます。入力した改行はバッファにとどまり、アルファベットを押すたびに c を割り当てます。したがって、code2 を試します。
#include <stdio.h>
int main()
{
int c = 'W';
while(c != 'F'){
scanf("%c\n",&c); //<-- the only modified place.
printf("c is : %c\n",c);
}
return 0;
}
次に、この画面が表示されます。
E
G <---why the input and has one step before the output?
c is : E
W
c is : G
S
c is : W
C
c is : S
F
c is : C
R <---R was left in stdin, turn to a garbage, I didn't hope this.
c is : F
stdin
また、 andをフラッシュしようとしましたがstdout
、まだ使用できません。
注:使用と対処するscanf("%c",c);
別の方法でこれを修正できるかどうかはわかっていますが、混乱しました。code2の問題が発生した理由を理解したいと思っています。scanf("%c",&d);
'\n'
以前に回答を確認しましたが、私は本当に慎重な人ではありません。この回答が本当に重複している場合、すべての反対票を理解できます。:)
前もって感謝します。