تحويل عرافة ممسوحة ضوئيا (SCANF) من صفيف كثيف غير موقعة في عشري

StackOverflow https://stackoverflow.com/questions/9033840

  •  14-11-2019
  •  | 
  •  

سؤال

أنا هنا أحاول تحويل هيكسا مكونة من 4 أرقام إلى ديسمبر ولكن لم تنجح. هنا هو رمز بلدي. giveacodicetagpre.

لا أعرف ما هو الخطأ في ذلك، لكنه لن يعطي فقط إخراج DEC الصحيح. مثل عندما وضعت في Eeff، من المفترض أن تعطي 61183 ولكن البرنامج أبقى في الطباعة 65518.

أين هذا الرقم من؟ ما الخطأ في قانون بلدي؟ لقد استخدمت INT INT UNSIGE وفقا لاتجاهي أن FFFF يساوي 65385، وكان نطاق INT INT INSISE هو 0 إلى 65535. يجب ألا تكون هناك مشكلة في مجموعة البيانات واستخدمت أيضا٪ يو معها.

الشيء الوحيد الذي يمكنني التفكير فيه الآن بعد أن قمت ببعض عمليات البحث هو أن هذه المشكلة قد تكون لديها sth للقيام بحجم int int أو sth. قرأت التفسير ولكن لم أفهم تماما.

أعرف، قد يكون هذا تكرارا ولكني هنا طلب تفسير أسهل لماذا هذا لا يعمل. أن نكون صادقين، أنا Newby تماما لكل من هذا الموقع والبرمجة، لذا يرجى الذهاب سهلا لي مع الترميز. لمعلوماتك، أنا لا أعرف حقا أي شيء خارج Stdio.h.

هل كانت مفيدة؟

المحلول

You are passing a pointer, array, to printf(). There is no need for an array here, what you're trying to scan and print is a single number.

unsigned int number;

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

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

Also note that it's considered a good idea to check if scanf() succeeds or not, by inspecting the return value.

نصائح أخرى

You don't need an array for that:

unsigned int val;
printf("Type in 4-digit hexa: \n");
scanf("%x", &val);
printf("Your number in dec is %u \n", val);

a. print array[0], not array.

(optional) b. scan to array, not to &array.

c. what is the point of the getchar()?

No, you must input as string to a point of characters. After that, you convert to number. Ex

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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top