• 締切済み

教えてください!!

このソースを実行しても、1~4を選んでも足し算になってしまいます。どこが違っているか、教えてください。 int main(void) { int na, nb, nc; printf("二つの整数の演算を行います。\n"); printf("二つの整数を入力してください\n"); printf("整数A"); scanf("%d", &na); printf("整数B"); scanf("%d", &nb); printf("1:加算\n2:減算\n3:乗算\n4:除算\n"); printf("1~4のどれかを入力してください。"); scanf("%d", &nc); switch(nc) { case1: printf("%d + %dは、%dです。\n", na, nb, na + nb); break; case2: printf("%d - %dは、%dです。\n", na, nb, na - nb); break; case3: printf("%d * %dは、%dです。\n", na, nb, na * nb); break; case4: printf("%d / %dは、%dです。\n", na, nb, na / nb); break; default: printf("%dは番号が違います。\n"); } return(0); }

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>必ずprintf("%dは番号が違います。\n");が実行されるはずですが? >>1~4を選んでも足し算になってしまいます >ほんとに足し算していますか? bcc32でそのままコンパイルした場合、 case1: printf("%d + %dは、%dです。\n", na, nb, na + nb); break; が実行される結果となりました。 >どこが違っているか、教えてください。 他の方も指摘しているとおり、 case 1: のようにcaseの後にスペースが必要です

  • TT414
  • ベストアンサー率18% (72/384)
回答No.2

No.1の方と同じですが、caseの後にスペースが無いため、case1からcase4までgoto文用のラベルになっています。 caseラベルが無く、defaultラベルのみ生きています。 ですから、必ずprintf("%dは番号が違います。\n");が実行されるはずですが? >1~4を選んでも足し算になってしまいます ほんとに足し算していますか?

回答No.1

case の直後、少なくとも一個の空白がありますか? case1: ではなく case 1: となっていますか?