- ベストアンサー
16進数を入力するプログラムの実装方法と結果の説明
- 16進数を入力するプログラムを作成するための方法を解説します。
- プログラムの実行結果について異なる答えが表示される場合の対処方法を説明します。
- 詳細な実装コードとその動作について説明します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>どうしたらよいのか見当も付かず困っております、教えてください 大きく2点(↓コメント付加部)について、思い違いというか、うっかりしています。 #include<stdio.h> void main() { int number = 0; int ch; printf( "input ? " ); while( 1 ){ ch = getchar(); if( '\n' == ch ) break; number *= 16; // 3E8)16 は 3 * 16^2 + 14 * 16^1 + 8 * 16^0 = 1000)10 if( ( '0' <= ch ) && ( ch <= '9' ) ){ number += ( ch - '0' ); } if( ( 'A' <= ch ) && ( ch <= 'F' ) ){ number += ( ch - 'A' + 10 ); // 加算 } } printf( "your input number is %d(%X)\n", number, number ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
その他の回答 (4)
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
> 追加で質問なのですが、上記の場合、3は何処へ行ったのでしょうか? 消えています。 だから、3E8 くらいは処理を追いかけましょう。 3 を入れたらどういう経路をたどって、 E を入れたらどういう経路をたどって、 8 を入れたらどういう経路をたどるか。
- titokani
- ベストアンサー率19% (341/1726)
>かなり大きな数字になってしました。 って、具体的にはいくつになったのですか?
補足
確か、3E8を打ち込むと40923になったと思います。 学校のパソコンを使って走らせているため、はっきりしないのですが・・・ 宜しくお願いします
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
少なくとも、3E8 という入力例くらいは、ソースをたどってみましょう。 3 -> 3 E -> 14 8 -> 8 で、 3E8 -> 14 * 10 + 8 = 148 という計算をしているから。 どんなバグでも、毎回同じ結果になるバグは、「思った通りには動いてないけど、プログラムとしては正しく動いている」のです。
補足
回答ありがとうございます。 追加で質問なのですが、上記の場合、3は何処へ行ったのでしょうか? 計算結果から外れている?ようなのですが
- Cupper
- ベストアンサー率32% (2123/6444)
分からなくなったらフローシートに書き出してみてください。 ええ、始めに作ったフローシートではなく、プログラムを見てフローシートに書き出すんです。 16進数で入力して 10進数で表示すると言うのでしたら… 1.キー入力を待つ 2.Enterキーが押されたら10進数で表示して処理を終了する 3.入力が有効なら10進数化する 4.以前に入力された数値を【16倍】して新たに入力された数値を加える 5.2へもどる の手順はずです。 なんか、16倍しているステップがないんだけど大丈夫?
補足
素早い回答ありがとうございます。 ch=getchar();の下に number=number*16+ch; と付け足したのですが、かなり大きな数字になってしました。 何処がおかしいか教えてください
お礼
なるほど よく分かりました。 教えてくださり、ありがとうございます