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にしましたがなりません。
よろしくお願いします。
'0'じゃなくて、0
'1'じゃなくて、1
'2'じゃなくて、2
'0'と書くと「0」という文字の値になります。
それと、こういう場合、
'0'の値をprintf(%d\n, '0')とするとかして
まず聞く前にできる限りのデバッグをした上で
質問したほうがいいですよ。
あ、
char c;
scanf(%c, &c);
としてれば、
switch (c) {
case '0':
printf(Hello world\n);
break;
//...略
}
でできます。
わかりました。やってみます。
どうもありがとうございました。
ちなみに、
> scanf(%d\n,a);
は、
scanf(%d\n, &a);
とする必要があります。
>'0'の値をprintf(%d\n, '0')とするとかして
これは普通しないでしょう。
('0'と0が違うと思っていれば、そもそもこう書かないはずなので)
printf(%d\n, a)くらいなら期待してもいいと思いますが・・
>これは普通しないでしょう。
>('0'と0が違うと思っていれば、そもそもこう書かないはずなので)
いえ、心構えとして、最初に疑って欲しいのですよ。
「aには0が入っているのに、'0'のcaseラベルに来ない」というなら、
「もしかして、'0'って0じゃないのか??」
というふうに。
自分が人にエラーを聞かれたときは、
絶対に根本的なところから疑うので。
(たとえばコンパイルしているソースと
画面に出しているソースが同じかどうかとか)。
あと、
>scanf(%d\n, &a);
は、期待通りに動きませんよ。
scanf(%d, &a);
でないと。
>「aには0が入っているのに、'0'のcaseラベルに来ない」というなら、
>「もしかして、'0'って0じゃないのか??」
>というふうに。
言語を把握していれば、そういう発想も出来ますが、
switch (c) {
case (0):
printf(Hello world\n);
break;
}
で、意図した動作をしない時に、
printf(%d\n, (0));
を試しますか?
言われてみれば
> '0'の値をprintf(%d\n, '0')とするとかして
これを求めるのは無理な気がしますが
> 「aには0が入っているのに、'0'のcaseラベルに来ない」というなら、
> 「もしかして、'0'って0じゃないのか??」
ここまではたどり着いて「'0' と 0 は違うんですか? 教えてください」くらいまでは
来れるか…?