2012-05-14 6 views
2

Xcode開発ツールを初めて使用しました。問題をデバッグするために、私は非常に単純なコードを試してみました:Xcodeが2回目のscanf()呼び出しをスキップするように見えるのはなぜですか?

int main() 
{char N; 
char M; 
scanf("%c",&N); 
scanf("%c",&M); 
printf("%c",N); 
printf("%c",M); 
} 

をしかし、問題は、コンパイラが第二のscanfを読むようには見えないということです。だから私はコンソールに1文字を入力することができますし、その後、プログラムは停止します。驚いたことに、 "char"の代わりに "int"と同じコードを書くと、うまく動作します。誰が何が間違っているのか考えていますか?

+0

あなたはランクの初心者ですから、問題の内容を知っていると推測してはいけません。特に、あなたがランクの初心者ではないとしても、ツールに問題があると推測すべきではありません。したがって、あなたの "質問"のタイトルは非常に悪いです。 –

+0

'aa'と打ち込んでから入力するとどうなりますか? –

答えて

6

最初のscanfに文字を入力したらEnterキーを押すでしょうか?そのEnterは、第2のscanfによって読み込まれるものです。 2番目のprintfで印刷されます。

あなたはこのプログラムの出力を示していないが、あなたは%cから%d\nへのprintfの書式を変更する場合は、「」と入力し、Enterキーを押しますと入力した場合、それはおそらく、次のようなものです:

97 
10 

これは、Enter(改行または改行)の文字コードです。

+0

そして、この問題を解決する一つの方法は、 '%* c'フォーマット仕様を使って、改行を読み込んで破棄することです。' scanf( "%c%* c"、&N); scanf( "%c% c "、&M);' –

+0

@JonathanLeffler:そうですね、私はそのレベルの詳細(Macの前ではできないので試してみることはできませんでした)に入ると思っていたので、 "... like like ..."と決めました。 –

+0

Wrightはあなたの教訓に感謝します!Best、Newben – Newben

関連する問題