![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
独学で最近c言語を始めたものです。10進数を16進数に変換するプログラムを作りました。
しかしコンパイルしてもエラーは出ないのですがprintfの部分で配列の結果のみが出ません。
如何せん、独学ですので気付かないところで簡単なミスをしているかもしれませんが、分かる方がいましたご教授ください。
#include<stdio.h>
int main()
{
static char data[16]=
{'1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char hex[5];
short dec,num,i;
for(;;){
for(i=0;i<=3;i++)
hex[i]=' ';
hex[4]='\0';
printf("10進数を入力してください。>>");
scanf("%d",&dec);
if(dec==0)
break;
for(i=3;dec!=0;i--){
num=dec%16;
dec/=16;
hex[i]=data[num];
}
printf("16進数は%sです\n",hex);
}
}
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;
}
No.2
- 回答日時:
> scanf("%d",&dec);
scanf系の関数のフォーマット文字列と、引数の型は一致させるようにしましょう。
decがshortでも %d は intの分だけ書き込みます。shortで足りない分は、他の領域に書き込まれてしまいます。
shortを使うなら%hdとshortに対応した書式に、%dを使うなら、decはint型にしましょう。
詳しくは、scanfのマニュアルの書式のところを参考にしてください。
それから、scanfは扱いの難しい関数です。(例えば、いきなり数字じゃない文字を入れたらどうなると思いますか?)
戻り値はチェックした方がよいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既約分数の表示プログラム
-
defineで定数が置き換えられな...
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
コンパイルエラーについて
-
cshの文字列操作(0埋め)
-
c言語でAからZまでを表示する...
-
10個出力で改行したいのですが...
-
ifなんですが
-
ブラックジャック
-
C言語 プログラミング
-
if~else文の中にまたif~else...
-
3つの整数を画面から入力して...
-
CTRL+Dでループを抜けるには
-
入力したお金の金額からお札の...
-
コーディング
-
九九を表示させるプログラム
-
万年カレンダーのC言語プログラ...
-
%P と %X の違い
-
BMI値から体型を判定するプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
コマンドラインに出力した文字...
-
strcmp
-
4の倍数を論理演算で表す。。
-
C言語での、年複利の計算方法...
-
C言語 プログラミング
-
scanfに文字が入力されたときに...
-
hit&bolwのプログラミングがで...
-
%P と %X の違い
-
unsigned int型について
-
printf( " %2d", p * q );
-
cshの文字列操作(0埋め)
-
改行について 1行に何個かづ...
-
8人分のテストの点数を入力し、...
-
入力したお金の金額からお札の...
-
三角形の判別
-
テキストカーソル位置の取得
おすすめ情報