• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:独学で最近c言語を始めたものです。10進数を16進数に変換するプログラ)

C言語で10進数を16進数に変換するプログラムの作成方法

このQ&Aのポイント
  • 独学で最近C言語を始めた人が10進数を16進数に変換するプログラムを作成しましたが、printfの部分で配列の結果が表示されません。
  • ご教授いただける方がいれば、簡単なミスがあるかもしれないので教えていただきたいです。
  • プログラムのコードは提示されているので、ご確認いただきながらアドバイスをいただければと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

data[16]に'0'がありません。 decなどの型をshortにする理由がわかりません。数の大きさを制限したいなら、そのようなコードを付け加えた方がよいでしょう。 mainがintの戻り値をとるのでreturn 0で帰ってください。無限ループじゃない方がいいような気もします。実行を終了するのにbreakよりreturn 0の方がいいでしょう。 数値以外の数や、負数が入力されたときの対応なども考えた方がいいでしょう。 全体としては特に問題なく動くようです。 下記で、どうでしょう。 #include<stdio.h> int main() { static char data[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; char hex[5]; int dec,num,i; for(;;){ for(i=0;i<=3;i++){ hex[i]=' '; hex[4]='\0'; } printf("10進数を入力してください(32767より小さい数)。>>"); scanf("%d",&dec); if(dec>32767) return 0; if(dec<=0) return 0; for(i=3;dec!=0;i--){ num=dec%16; dec/=16; hex[i]=data[num]; } printf("16進数は%sです\n",hex); } return 0; }

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> scanf("%d",&dec); scanf系の関数のフォーマット文字列と、引数の型は一致させるようにしましょう。 decがshortでも %d は intの分だけ書き込みます。shortで足りない分は、他の領域に書き込まれてしまいます。 shortを使うなら%hdとshortに対応した書式に、%dを使うなら、decはint型にしましょう。 詳しくは、scanfのマニュアルの書式のところを参考にしてください。 それから、scanfは扱いの難しい関数です。(例えば、いきなり数字じゃない文字を入れたらどうなると思いますか?) 戻り値はチェックした方がよいです。

asdflkjh
質問者

お礼

お二方ともありがとうございます。short→int でreturn 0;で無事解決しました!! ありがとうございました! 

関連するQ&A