• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:16進数を入力するプログラムを作成するという課題がでたのですが、)

16進数を入力するプログラムの実装方法と結果の説明

このQ&Aのポイント
  • 16進数を入力するプログラムを作成するための方法を解説します。
  • プログラムの実行結果について異なる答えが表示される場合の対処方法を説明します。
  • 詳細な実装コードとその動作について説明します。

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

  • ベストアンサー
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.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)

回答No.4

> 追加で質問なのですが、上記の場合、3は何処へ行ったのでしょうか? 消えています。 だから、3E8 くらいは処理を追いかけましょう。 3 を入れたらどういう経路をたどって、 E を入れたらどういう経路をたどって、 8 を入れたらどういう経路をたどるか。

Nebiros
質問者

お礼

なるほど よく分かりました。 教えてくださり、ありがとうございます

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

>かなり大きな数字になってしました。 って、具体的にはいくつになったのですか?

Nebiros
質問者

補足

確か、3E8を打ち込むと40923になったと思います。 学校のパソコンを使って走らせているため、はっきりしないのですが・・・ 宜しくお願いします

回答No.2

少なくとも、3E8 という入力例くらいは、ソースをたどってみましょう。 3 -> 3 E -> 14 8 -> 8 で、 3E8 -> 14 * 10 + 8 = 148 という計算をしているから。 どんなバグでも、毎回同じ結果になるバグは、「思った通りには動いてないけど、プログラムとしては正しく動いている」のです。

Nebiros
質問者

補足

回答ありがとうございます。 追加で質問なのですが、上記の場合、3は何処へ行ったのでしょうか? 計算結果から外れている?ようなのですが

  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.1

分からなくなったらフローシートに書き出してみてください。 ええ、始めに作ったフローシートではなく、プログラムを見てフローシートに書き出すんです。 16進数で入力して 10進数で表示すると言うのでしたら…  1.キー入力を待つ  2.Enterキーが押されたら10進数で表示して処理を終了する  3.入力が有効なら10進数化する  4.以前に入力された数値を【16倍】して新たに入力された数値を加える  5.2へもどる の手順はずです。 なんか、16倍しているステップがないんだけど大丈夫?

Nebiros
質問者

補足

素早い回答ありがとうございます。 ch=getchar();の下に number=number*16+ch; と付け足したのですが、かなり大きな数字になってしました。 何処がおかしいか教えてください

関連するQ&A