مشکل اینجا بود که کامپایلر ورودیهایی مثل 0453 یا 0100 را به عنوان مبنای هشت میشناسد و آنها را به مبنای هشت میبرد. در این صورت 0453 میشود 3×1 + 5×8 + 4×64 = 299 و درنتیجه 2 را نتیجه میداد و 0100 میشود 64 که دو رقمی است.
مبنای 16 هم با 0x مشخص میشود.
به نظرم بهتر است که همان طوری که Hosseini گفتن ورودی را کنترل کنم یا اینکه موقع گرفتن ورودی به کاربر اطلاع بدهم.
همچنین میتوان موقع خواندن ورودی با استفاده از dec ورودی را به صورت دهدهی خواند. (cin >> dec >> num)
البته ظاهرا تو کامپایلرهای جدید به صورت پیشفرض اعداد در مبنای ده خوانده میشوند.
#include<iostream.h>
#include<conio.h>
int main() {
clrscr();
int num, a;
cout << "Input a three digit decimal integer: ";
cin >> dec >> num;
cout << "\nYour input: " << num << endl;
a = num / 100;
if (a <= 9)
if (a != 0) {
cout << "Hundreds digit is " << a;
getch();
return 0;
}
cout << "It should has 3 digits!";
getch();
return 0;
}
این چندتا لینک مفید بودن + + + + +