🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C

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

Q&A

解決済

2回答

6816閲覧

数字をひらがなよみに直す処理がうまくいきません

skull96_lia

総合スコア5

C

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

0グッド

0クリップ

投稿2019/11/16 06:07

前提・実現したいこと

c言語です。
ランダムで表示した0-99の数値をひらがな読みにしたいです。

発生している問題・エラーメッセージ

エラーメッセージ ```main.c: In function ‘main’: main.c:13:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 13 | result2="ぜろ"; | ^ main.c:15:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 15 | result1="じゅう"; | ^ main.c:17:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 17 | result1="にじゅう"; | ^ main.c:19:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 19 | result1="さんじゅう"; | ^ main.c:21:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 21 | result1="よんじゅう"; | ^ main.c:23:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 23 | result1="ごじゅう"; | ^ main.c:25:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 25 | result1="ろくじゅう"; | ^ main.c:27:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 27 | result1="ななじゅう"; | ^ main.c:29:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 29 | result1="はちじゅう"; | ^ main.c:31:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 31 | result1="きゅうじゅう"; | ^ main.c:35:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 35 | result1="いち"; | ^ main.c:37:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 37 | result2="に"; | ^ main.c:39:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 39 | result2="さん"; | ^ main.c:41:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 41 | result2="よん"; | ^ main.c:43:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 43 | result2="ご"; | ^ main.c:45:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 45 | result2="ろく"; | ^ main.c:47:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 47 | result2="なな"; | ^ main.c:49:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 49 | result2="はち"; | ^ main.c:51:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion] 51 | result2="きゅう"; | ^ main.c:56:1: error: expected declaration or statement at end of input 56 | } | ^ ### 該当のソースコード ```c言語 ソースコード ```#include<stdio.h> #include<stdbool.h> #include<stdlib.h> #include<time.h> int main(void){ srand(time(NULL)); int x=rand()%99; int y=x/10; int z=x-y*10; char result1; char result2; if(y==0&&z==0){ result2="ぜろ"; if(y==1){ result1="じゅう"; }else if(y==2){ result1="にじゅう"; }else if(y==3){ result1="さんじゅう"; }else if(y==4){ result1="よんじゅう"; }else if(y==5){ result1="ごじゅう"; }else if(y==6){ result1="ろくじゅう"; }else if(y==7){ result1="ななじゅう"; }else if(y==8){ result1="はちじゅう"; }else if(y==9){ result1="きゅうじゅう"; } if(z==1){ result1="いち"; }else if(z==2){ result2="に"; }else if(z==3){ result2="さん"; }else if(z==4){ result2="よん"; }else if(z==5){ result2="ご"; }else if(z==6){ result2="ろく"; }else if(z==7){ result2="なな"; }else if(z==8){ result2="はち"; }else if(z==9){ result2="きゅう"; } printf("%c%c",result1,result2); return 0; } ### 試したこと =変えたりしてみましたが変数ポインターの処理 ここに問題に対して試したことを記載してください。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

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

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

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

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

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

LouiS0616

2019/11/16 06:10

char型を使うべき場面について、どのような認識をお持ちでしょうか。
skull96_lia

2019/11/16 06:21

文字や文字列を入れたいとき、とおもってます…
guest

回答2

0

ベストアンサー

私:char型を使うべき場面について、どのような認識をお持ちでしょうか。
skull96_liaさん:文字や文字列を入れたいとき、とおもってます…

まずはこの部分の誤解を正す必要がありそうです。
一般にchar型は文字を格納する型であって、文字列を扱うことはできません。()

C

1char ch1 = 'A'; // OK 2char ch2 = "ABC"; // NG

文字列は結局文字の並びですから、次のどちらかの方法で扱うことができます。

  • 文字配列を保持する
  • 文字列の先頭ポインタを保持する

C

1char str1[] = "ABC"; // OK. str1 は char[] 型。 2char *str2 = "ABC"; // OK. str2 は char * 型。const指定するとなお良い。

ここまで知った上で警告を再読すると、何か見えてきませんか。

main.c:13:16: warning: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
13 | result2="ぜろ";
| ^

char * から char への 代入(assignment) にコンパイラが警告を発しているのです。


: 実際には数値を保持しますが、混乱しそうなのでちょっと誤魔化した書き方にしました。
: マルチバイト文字はややこしいので、本回答では考察を避けます。

コードの貼り方について

teratailにはコードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押して下さい。
C

投稿2019/11/16 06:33

編集2019/11/16 06:57
LouiS0616

総合スコア35668

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

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

skull96_lia

2019/11/20 02:13

できました!ありがとう御座います!
guest

0

LouiS0616さんの回答で修正した後に悩むであろう箇所について補足です。
printfで文字列を表示する場合は以下となります。

C

1char* str = "Hello World"; 2printf("%s",str);

C/C++では文字と文字列と数字の扱いは地味にややこしいですね。

投稿2019/11/20 02:05

YOshim

総合スコア1085

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

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

skull96_lia

2019/11/20 02:14

少しつまづいたところでした…!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問