質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1241閲覧

switch文について

qwertyhghv

総合スコア19

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/12/02 09:21

-9999~9999において、入力した数字に対応した日本語のローマ字を出力したいが、数を入力すると2桁以上の場合はローマ字が表示されない場合と、1桁の場合は入力した数字より大きい数の読み方すべてが表示されてしまう。

実行イメージ
2306
ni sen san hyaku roku

-3145
minus san sen hyaku yon ju go

#include <stdio.h> int main(){ int n = 0; scanf("%d", &n); if (n < -10000 || n > 10000){ printf("Input range is -9999 to 9999 "); }else { switch(n){ case 0: printf("zero"); case 1: printf("ici"); case 2: printf("ni"); case 3: printf("san"); case 4: printf("yon"); case 5: printf("go"); case 6: printf("roku"); case 7: printf("nana"); case 8: printf("hachi"); case 9: printf("kyu"); case 10: printf("ju"); case 100: printf("hyaku"); case 1000: printf("sen"); case '-': printf("minus"); } } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2021/12/02 09:30

入門サイトやリファレンスでswitch文の使い方を学習してはいかがでしょうか。
guest

回答2

0

ベストアンサー

ヒントになりそうなコードを示します.
とりあえず,まずはこのくらいの状態で,いろんな入力を与えてみてはどうでしょう.

そうすれば,
「こういう場合はこれを表示しちゃダメだ」とか,考慮すべき事柄が見えてくるのではないでしょうか.

1001 みたいな入力のときには 100の位や10の位に関する表示は出しちゃダメだとか,
入力値が 0 のときにはどうすればいいのかとか…

C

1//ある位の値 Kurai_Value (0~9) と,その位の名称文字列 Kurai_Str を与えると 2//その位のための表示を行う作業関数. 3void F( int Kurai_Value, const char *Kurai_Str ) 4{ 5 //※この実装だと 位の値 をそのまま数値で表示している. 6 //ローマ字で表示するようなswitchなりをここに実装すればよい. 7 //また,位の値が0だったら何も表示しないだとか,そういう工夫をここで行うこともできるだろう. 8 printf( " %d %s", Kurai_Value, Kurai_Str ); 9} 10 11//main 12int main() 13{ 14 int n = 0; 15 scanf("%d", &n); 16 if (n < -10000 || n > 10000) 17 { 18 printf("Input range is -9999 to 9999 "); 19 return 0; //変な入力のときは終了 20 } 21 22 if( n < 0 ) //負の値のときは,"minus" と表示すれば,あとは正の値と同じことをやればよい. 23 { 24 printf( "minus" ); 25 n = -n; //正の値にする 26 } 27 28 { 29 //{1000の位の値,100の位の値,10の位の値,1の位の値}を求める 30 int v1000, v100, v10, v1; 31 32 v1000 = n/1000; 33 34 n -= (v1000 * 1000); 35 v100 = n/100; 36 37 n -= (v100 * 100); 38 v10 = n/10; 39 40 n -= (v10 * 10); 41 v1 = n/1; 42 43 //表示 44 F(v1000, "sen" ); 45 F(v100, "hyaku" ); 46 F(v10, "ju" ); 47 F(v1, "\n" ); 48 } 49 50 return 0; 51}

投稿2021/12/02 09:55

編集2021/12/02 09:56
fana

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/12/02 09:59 編集

表示するローマ字表記を選択する処理を switch で書くにしても, 「その switch は何に関する分岐なのか?」というのが明確になるように 関数 F() という形を提示したつもり.
fana

2021/12/02 10:02

//{1000の位の値,100の位の値,10の位の値,1の位の値}を求める のところを囲んでいる {} は,取っ払っても大丈夫であれば無くていいよ. main関数内の途中のところで int v1000, v100, v10, v1; という変数の定義を書くと怒られる場合は必要.
guest

0

switchcaseの意味を理解しましょう。

1.switchの値に対応するcaseがあった時だけ、そこに制御が移ります。
2.対応するcaseが無かった場合は、defaultがあればそこに、無ければ何もしません。
3.次のcaseがあってもそこで実行は止まらないので、処理をswtichの外に移したければbreakを書きます。

投稿2021/12/02 09:49

otn

総合スコア84804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問