switch文 – プログラミング – Home

通知
すべてクリア

switch文


あくり
 あくり
(@あくり)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

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
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

'0'じゃなくて、0
'1'じゃなくて、1
'2'じゃなくて、2

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

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


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

あ、
char c;
scanf(%c, &c);
としてれば、
switch (c) {
case '0':
printf(Hello world\n);
break;

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


返信引用
あくり
 あくり
(@あくり)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

わかりました。やってみます。
どうもありがとうございました。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

ちなみに、
> scanf(%d\n,a);
は、
scanf(%d\n, &a);
とする必要があります。


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

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

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

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


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

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

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

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


返信引用
REE
 REE
(@REE)
ゲスト
結合: 23年前
投稿: 240
 

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

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

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

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

言われてみれば

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました