2
#include <iostream>
#include <sstream>

int main(int argc, char* argv[]) {
if ( argc != 2 ) {
 std::cout << "usage: " << argv[0] << " <n> " << std::endl;
 return 0;
}
std::stringstream strm;
strm << argv[1];
int count = 0;
int number;
strm >> number;
switch ( number ) {
 case 0: ++count; 
 case 1: ++count; 
 case 2: ++count; 
 case 3: ++count; 
 case 4: ++count; 
 }

    std::cout << "count: " << count << std::endl;
    return 0;
 }

これは初心者の質問であることはわかっていますが、C++ を使い始めたばかりです。私はゲーム デザインのコースを受講しましたが、これは教授が SVN を使用した最初の例です。コンパイル後にプログラムを実行すると、

./run 4 (つまり、引数 4 を指定) 次の出力が得られます: count: 1

./run 3 次の出力が得られます: count: 2

./実行 1 カウント: 4

./実行 0 カウント: 5

count は 0 に初期化されているため、どうして ./run 1 が 4 を返したり、./run 0 が count 5 を与えたりするのでしょうか。

くだらない質問で大変恐縮ですが、どなたか教えていただければ幸いです。

よろしくお願いします

4

2 に答える 2

10

ステートメントを使用するswitchと、コントロールがラベルに渡されると、コードはor (または他のフロー制御メカニズム) が検出されるまで、case他のすべてのラベルを通過し続けます。これは、特定のケースのロジックを統一するのに役立ち、より複雑なタスクにも使用できます。たとえば、ダフのデバイスを参照してください。casebreakreturn

于 2013-01-16T21:33:55.970 に答える
3

switchステートメントは、一連のコードを入力する場所を定義します。

switch ( number ) {
 case 0: ++count; //entrance point with number= 0
 case 1: ++count; //entrance point with number= 1
 case 2: ++count; //entrance point with number= 2
 case 3: ++count; //entrance point with number= 3
 case 4: ++count; //entrance point with number= 4
}

本質的に、スイッチの最後に到達することを除いて出口はありません。ただし、「ブレーク」を追加することは可能です。ケースの下の任意の場所でステートメントを実行して、コードをスイッチから早期に終了させます(またはスコープから外します)。

さらに、トピックから少し外れていますが、caseステートメントではキーワード「default」を使用する必要があります。デフォルトのキーワードは、番号に大文字と小文字が定義されていない場合に呼び出されます。上記のケースを使用した例は、誰かが番号6をケースに送信した場合です。

于 2013-01-16T21:37:18.457 に答える