2017-11-24 4 views
-4
void main() 
{ 
char ch='A'; 
while (ch <='F'){ 
switch (ch){ 
case 'A': 
case 'B': 
case 'C': 
case 'D': ch++; continue; 
case 'E'; 
case 'F': ch++; 
} 
putchar (ch); 

} 

私の質問は、なぜプログラムの出力がFGであるのか、なぜ文字E(EFG)が印刷されないのかということです。また、putcharの定義が画面上に1文字しか表示されない場合、なぜputcharは2文字を出力するのでしょうか? Eが印刷されていない理由の質問にputcharで画面に文字を印刷する

+1

'case 'E';' - コンパイルすることはできません。 – KonstantinL

+1

[プログラムのデバッグ方法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参考にしてください。こうすることで、デバッガの助けを借りて、行ごとにコードをステップ実行して、デバッガの機能を確認することができます。 –

+0

私は再質問の感覚を持っています。 – iBug

答えて

-1

は、私はここにあなたのコードに作られたコメントを見てみましょう:

void main() 
{ 
char ch='A'; 
while (ch <='F'){ 
switch (ch){ 
case 'A': // ch: A=>B; continue; 
case 'B': // ch: B=>C; continue; 
case 'C': // ch: C=>D; continue; 
case 'D': ch++; continue; // ch: D=>E; continue; | E isn't printed here "continue" is called instead. 
case 'E'; // ch: E=>F; putchar(F); | E isn't printed here either F is printed because F is assigned just before "putchar" is called. 
case 'F': ch++; // ch: F=>G; putchar(G); 
} 
putchar (ch); 

} 

2番目の質問は、なぜのputchar版画、2つの文字: それはしませんが。そのたびに出力バッファに1つのcharだけが書き込まれますが、出力バッファは遅延呼び出しでは画面に書き込まれます。

出力をすぐに表示するには、putcharの後にstd::cout.flush()を使用してください。

case 'E';からcase 'E':に変更してコードをコンパイルできるようにしてください。

0

ケースEになると休憩がないので、そのステートメントの後では、switchステートメントの後ですべての場合を実行し、ch ++を実行します。 F E ++がFなのでputcharが表示されるF 次はwhile文の条件がF以下であるため、スイッチに再び入ります ケースFの場合は、再びch ++を実行します。chはGの値を保持しますputcharプリントG GはF以下ではないため、whileループを終了して終了します。 したがって、FとGを出力しました。

関連する問題