1

ここで 4 桁の 16 進数を 10 進数に変換しようとしていますが、成功しませんでした。これが私のコードです。

unsigned int array[4];                         

printf("Type in 4-digit hexa: \n");

scanf("%x", &array);

while(getchar() != '\n');

printf("Your number in dec is %u \n", array);

何が問題なのかわかりませんが、正しい dec 出力が得られないだけです。私が EEFF を入力したときのように、61183 を出力するはずですが、プログラムは 65518 を出力し続けました。

この番号はどこから?コードの何が問題になっていますか? FFFF は 65385 に等しく、unsigned int の範囲は 0 ~ 65535 であるという私の考察に従って、unsigned int を使用しました。データの範囲に問題はないはずで、%u も使用しました。

いくつかの検索を行った後、私が今考えることができる唯一のことは、この問題が unsigned int から int または sth へのサイズに関係している可能性があるということです。説明を読んだのですが、よくわかりませんでした。

これは重複している可能性がありますが、これが機能しない理由の簡単な説明を求めています。正直に言うと、私はこのサイトとプログラミングの両方にまったく慣れていないので、コーディングは簡単に行ってください。参考までに、 stdio.h 以外は何も知りません。

4

4 に答える 4

7

へのポインター、、を渡していarrayますprintf()。ここでは配列は必要ありません。スキャンして印刷しようとしているのは単一の数値です。

unsigned int number;

printf("Type in 4-digit hex:\n");

if (scanf("%x", &number) == 1)
  printf("Your number in dec is %u \n", number);

scanf()また、戻り値を調べて、成功したかどうかを確認することをお勧めします。

于 2012-01-27T13:23:32.920 に答える
2

そのための配列は必要ありません。

unsigned int val;
printf("Type in 4-digit hexa: \n");
scanf("%x", &val);
printf("Your number in dec is %u \n", val);
于 2012-01-27T13:24:32.230 に答える
1

を。プリントarray[0]、ありませんarray

(オプション) b. arrayではなく までスキャンし&arrayます。

c. のポイントは何getchar()ですか?

于 2012-01-27T13:25:06.763 に答える
-3

いいえ、文字列として文字列として入力する必要があります。その後、数値に変換します。元

char *str=char[10];
int i=0,num=0;
printf("Type in 4-digit hexa: ");
scanf("%s",str);

for(i=0;str[i]!='\0';i++)
   if(str[i]>='0' && str[i]<='9') num=16*num+str[i]-'0';
   else if(str[i]>='a' && str[i]<='f') num=16*num+str[i]-'a';
   else if(str[i]>='A' && str[i]<='F') num=16*num+str[i]-'A';

printf("Dec is %d",num);
于 2012-01-27T13:30:26.107 に答える