switch文

[戻る]
あくり 2005/07/16(土) 18:53:00
switch文を使って、
標準入力された数値を3で割った余りが
0のときHello world
1のときこんにちは
2のときおつかれさまです
と表示されるプログラムを作りたいのですがうまくいきません。

アドバイスお願いします。

プログラムは
#include<stdio.h>
int main (void)
{
int a;
printf("正整数を入力してください\n");
scanf("%d\n",a);

switch(a%3)
{
case'0':
printf("Hello world\n");
break;
case'1':
printf("こんにちは\n");
break;
case'2':
printf("おつかれさまです\n");
break;
}
return 0;
}

というものです。
switch文をつくったことがないので良く分かりません。
intにbを足し、b=a%3;にし、
switchの後をbにしましたがなりません。

よろしくお願いします。

reshia [HomePage] 2005/07/16(土) 19:24:00
'0'じゃなくて、0
'1'じゃなくて、1
'2'じゃなくて、2

'0'と書くと「0」という文字の値になります。

それと、こういう場合、
'0'の値をprintf("%d\n", '0')とするとかして
まず聞く前にできる限りのデバッグをした上で
質問したほうがいいですよ。

reshia [HomePage] 2005/07/16(土) 19:26:14
あ、
char c;
scanf("%c", &c);
としてれば、
switch (c) {
case '0':
  printf("Hello world\n");
  break;

//...略
}
でできます。

あくり 2005/07/16(土) 19:28:28
わかりました。やってみます。
どうもありがとうございました。

RAPT 2005/07/17(日) 11:42:10
ちなみに、
> scanf("%d\n",a);
は、
scanf("%d\n", &a);
とする必要があります。

REE 2005/07/18(月) 10:36:10
>'0'の値をprintf("%d\n", '0')とするとかして

これは普通しないでしょう。
('0'と0が違うと思っていれば、そもそもこう書かないはずなので)

printf("%d\n", a)くらいなら期待してもいいと思いますが・・

reshia 2005/07/18(月) 15:33:34
>これは普通しないでしょう。
>('0'と0が違うと思っていれば、そもそもこう書かないはずなので)
いえ、心構えとして、最初に疑って欲しいのですよ。
「aには0が入っているのに、'0'のcaseラベルに来ない」というなら、
「もしかして、'0'って0じゃないのか??」
というふうに。

自分が人にエラーを聞かれたときは、
絶対に根本的なところから疑うので。
(たとえばコンパイルしているソースと
 画面に出しているソースが同じかどうかとか)。

あと、
>scanf("%d\n", &a);
は、期待通りに動きませんよ。
scanf("%d", &a);
でないと。

REE 2005/07/18(月) 16:16:24
>「aには0が入っているのに、'0'のcaseラベルに来ない」というなら、
>「もしかして、'0'って0じゃないのか??」
>というふうに。

言語を把握していれば、そういう発想も出来ますが、

switch (c) {
case (0):
  printf("Hello world\n");
  break;
}

で、意図した動作をしない時に、
printf("%d\n", (0));
を試しますか?

シャノン 2005/07/18(月) 16:46:38
言われてみれば

> '0'の値をprintf("%d\n", '0')とするとかして

これを求めるのは無理な気がしますが

> 「aには0が入っているのに、'0'のcaseラベルに来ない」というなら、
> 「もしかして、'0'って0じゃないのか??」

ここまではたどり着いて「'0' と 0 は違うんですか? 教えてください」くらいまでは
来れるか…?

古いスレッドには追加発言できません。