-1

このコードの問題点:

switch (n)
{
    case 0:   strcpy(resultString, "Zero");
    case 1:   strcpy(resultString, "One");
    case 2:   strcpy(resultString, "Two");
    case 3:   strcpy(resultString, "Three");
    case 4:   strcpy(resultString, "Four");
    case 5:   strcpy(resultString, "Five");
    case 6:   strcpy(resultString, "Six");
    case 7:   strcpy(resultString, "Seven");
    case 8:   strcpy(resultString, "Eight");
    case 9:   strcpy(resultString, "Nine");
}
printf("%s", resultString);

n の値に関係なく、常に「Nine」と出力されます。私は何を間違っていますか??

4

4 に答える 4

4

ケースごとに中断する必要があります。

case 0: 

do soemthing;

 break;

case 1:

 do something;

 break;

多くのマネージ言語では、「あるケースが別のケースに落ちる」ことはなく、エラーがスローされます。しかし、C はあなたがやりたいことを何でもさせてくれるのが大好きです!

于 2013-08-14T18:13:05.130 に答える
1

標準から:

6.4.2 switch ステートメント [stmt.switch]

case および default ラベル自体は制御の流れを変更せず、制御の流れはそのようなラベル間で妨げられずに継続します。を終了するには、 (6.6.1)switchを参照してください。break

6.6.1 break ステートメント [stmt.break]

breakステートメントは、反復ステートメントまたはステートメントでのみ発生し、switch最小の囲み反復ステートメントまたはスイッチ ステートメントを終了させます。制御は、終了したステートメントの次のステートメントに渡されます (存在する場合)。

つまりbreak、各caseの後に を使用しないということです。プログラムはcase、条件に一致する最初の人物を入力しswitch、最後まで のすべての行を実行し続けます。

次のようなことをするだけです:

switch( n )
{
    case 0:
        // ...
        break; // <- Note the break
    //...

    default:
        // ...
}
于 2013-08-14T18:19:03.643 に答える