16進数を入力するプログラムを作成するという課題がでたのですが、
下記の内容でコンパイルしたところ、'A'一文字は10を表示しましたが
3E8は148など、数と組み合わせるとまったく違う答えが表示されます。
どうしたらよいのか見当も付かず困っております、教えてください
#include<stdio.h>
main()
{
int number;
int ch;
printf("input ?");
number=0;
ch=getcher();
while(ch !='\n'){
if('0'<= ch && ch <= '9'){
number=number*10;
number=number+(ch-'0');
}
if('A'<= ch && ch <= 'F'){
number=ch-'A'+10;
}
ch=getcher;
}
printf("your input number is %d\n",number);
}
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 );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
No.3
- 回答日時:
>かなり大きな数字になってしました。
って、具体的にはいくつになったのですか?
この回答への補足
確か、3E8を打ち込むと40923になったと思います。
学校のパソコンを使って走らせているため、はっきりしないのですが・・・
宜しくお願いします
No.1
- 回答日時:
分からなくなったらフローシートに書き出してみてください。
ええ、始めに作ったフローシートではなく、プログラムを見てフローシートに書き出すんです。
16進数で入力して 10進数で表示すると言うのでしたら…
1.キー入力を待つ
2.Enterキーが押されたら10進数で表示して処理を終了する
3.入力が有効なら10進数化する
4.以前に入力された数値を【16倍】して新たに入力された数値を加える
5.2へもどる
の手順はずです。
なんか、16倍しているステップがないんだけど大丈夫?
この回答への補足
素早い回答ありがとうございます。
ch=getchar();の下に
number=number*16+ch;
と付け足したのですが、かなり大きな数字になってしました。
何処がおかしいか教えてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fflush(stdin)の使い方とprintf...
-
プログラミングの問題です 「金...
-
c言語のプログラムで行列の積を...
-
C言語 逆ピラミッドの作り方
-
電卓の小数点
-
16進数を入力するプログラムを...
-
Excel VBAで、Application.Inpu...
-
プログラミング初心者です。 Py...
-
プログラミング python
-
至急お願いします。プログラミ...
-
scanfが2回使えない・・・?;
-
c言語でひらがなのしりとりをで...
-
c言語の数当てゲームプログラム...
-
ゲームダンジョンの武器の装備...
-
ループ中でのscanfおよびcin
-
C言語について。
-
scanf が無視されます
-
文字列を足し合わせる。
-
永久ループ・・・
-
プログラミングC言語について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
プログラミングの問題です 「金...
-
Eclipseコンソール表示を、リセ...
-
C言語 逆ピラミッドの作り方
-
"scanf"でエンターで改行させな...
-
scanf が無視されます
-
if文の条件にscanf関数を使うと…?
-
C言語について
-
C言語scanf_sで何故か2回入力に...
-
Excel VBAで、Application.Inpu...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
double型が正常に認識されてい...
-
scanfが2回使えない・・・?;
-
C言語でgetchar();が上手く使え...
-
WindowsでEOF
おすすめ情報