0

ユーザーが数字を選択し、表を表示した後に乗算表を作成したいと考えています。しかし、私のコードでは、スイッチ内で while が機能しません。なぜですか? 元:

#include<stdio.h>

int main(){

int x,y=10;

printf("Welcome!\n");
printf("choose a number for multiplication table \n");
scanf("%i",&x);


switch(x){

    case '1':
        while(y)
        {

            printf(" %i * %i  = %i \n",x,y,x*y);
            y--;


        }
    };break;    
}
}
4

4 に答える 4

4

余分な } があります

case '1':
    while(y)
    {

        printf(" %i * %i  = %i \n",x,y,x*y);
        y--;


    }
};break; // This break is outside of your switch 

また、1 の整数値ではなく、1 の文字値をオンに切り替えていますcase。同様に、一致するように変更する必要があります。

于 2012-12-15T20:15:28.003 に答える
2

'1'int値ではありません1(ただし、文字リテラル'1'であり、int値は です49)ので、スイッチでそのケースに入っていないと思われます。ケース ラベルを整数リテラルに変更し1ます。

case 1:

の戻り値をチェックしてscanf()intが読み取られ、後続のコードが処理されていないことを確認しxます。

if (1 == scanf("%i", &x))
{
}
于 2012-12-15T20:15:04.673 に答える
1

C ++のswitch-case構文:

switch ( x) {

  case 1 : //x is an integer

    while(y)
    {
        printf(" %i * %i  = %i \n",x,y,x*y);
        y--;
    }
    break; //Inside the case


}
于 2012-12-15T20:17:59.650 に答える
1

追加の中かっこにもかかわらず、switch ステートメントで入力値とオプションを比較する方法に問題があります。次の行で:

scanf("%i",&x);

コンパイラは、プログラムがここで整数値を期待していることを通知されるため、ユーザーが stdin で 1 を入力すると、0x01 が x 変数に格納されます。残念ながら、ここに:

case '1':

x 変数は、0x31 に等しい '1' (ASCII 文字) と比較されます。したがって、ケースステートメントは次のようになります。

case 1:

もちろん、case ステートメントでは ASCII 文字を使用できます。入力を char データ型として扱うようにプログラムを変更できます。

scanf("%c",&x);

次に、0x31 が x 変数に格納され、それを '1' と比較することは理にかなっています。ただし、プログラムの機能を損なわないように、x を int 値に変換することを忘れないでください。

x -= 0x30;

最初のアプローチは間違いなくより便利です。

于 2012-12-15T22:54:44.177 に答える