0 امتیاز
قبل در کامپیوتر و اینترنت توسط (4.9هزار امتیاز)
برچسب گذاری دوباره قبل توسط

کد زیر قرار است رقم صدگان عددی سه رقمی را با استفاده از تقسیم صحیح چاپ کند. وقتی مثلا ورودی 453 را می‌دهیم 4 را چاپ می‌کند که درست است. وقتی عددی غیر از سه رقمی وارد شود پیغام آخر را چاپ می‌کند که این هم همانطوری است که مد نظر است.

اما وقتی ورودی چیزی مثل 0453 باشد خروجی 2 است در حالی که انتظار دارم عدد 4 باشد. یا وقتی ورودی مثلا 0100 است پیغام آخر را چاپ می‌کند.

#include<iostream.h>
#include<conio.h>
int main() {
   clrscr();
   int num, a;
   cout << "Input a three digit integer: ";
   cin >> num;
   a = num / 100;
   if (a <= 9)
      if (a != 0) {
         cout << a;
         getch();
         return 0;
      }
   cout << "It should has 3 digits!";
   getch();
   return 0;
}

کامپایلری که استفاده می‌شود TurboC++3.0 است. مشکل کجاست؟

قبل توسط (1.9هزار امتیاز)
+1
مشکل شما در این است که 0 که در اول قرار می گیره بیتها رو جا به جا می کنه ولی تو محاسبات شرکت نمی کنه در زبان سی یادمه تابع getchar می شود ورودی رو کنترول کرد معادل در زبان Cpp رو یادم نیست

2 پاسخ

+1 امتیاز
قبل توسط (4.9هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

مشکل اینجا بود که کامپایلر ورودیهایی مثل 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;
}

این چندتا لینک مفید بودن + + + + +

+1 امتیاز
قبل توسط (2.6هزار امتیاز)
ویرایش شده قبل توسط
من کدتونو  تست کردم مشکلی نداشت

احتمالا مشکل از کامپایلرتونه
قبل توسط (1.9هزار امتیاز)
ویرایش شده قبل توسط
+1
نیازی  نیست در  If Statment  این زبان.
 Compiler مختلف هستند حتی ورژن های مختلف Turbo اگر به یک ورژن بنویسید و بعد با یکی دیگر Trace کنید 80% خطا میده
در اسمبلی هم داریم در عداد علامت دار  صفر دو فضا رو می گیره وقتی اول عدد به کار بره به همین باید از اون مکمل بگیرم کلا بگزریم زبان c,c++ هم مدیریت حافظه آنها میشه گفت مثل بیل و کولنگه باید بیت به بیت با اون پیش رفت
قبل توسط (4.9هزار امتیاز)
ممنون از وقتی که گذاشتین یکم جستجو کردم فهمیدم به خاطر اینه که کامپایلر صفر پشت عدد را برای مشخص کردن اینکه ورودی در مبنای هشت هست به کار میبره
الآن چیزایی که فهمیدم را مینویسم

سوالات مشابه

+1 امتیاز
1 پاسخ 835 بازدید
+1 امتیاز
2 پاسخ 1.8هزار بازدید
+3 امتیاز
3 پاسخ 10.5هزار بازدید
0 امتیاز
0 پاسخ 319 بازدید
سوال شده 9 سال قبل در کامپیوتر و اینترنت توسط N.SA (801 امتیاز)
0 امتیاز
0 پاسخ 1.2هزار بازدید
سوال شده 9 سال قبل در کامپیوتر و اینترنت توسط Saeed Zarinfam (1.1هزار امتیاز)
+1 امتیاز
1 پاسخ 792 بازدید
0 امتیاز
1 پاسخ 590 بازدید
0 امتیاز
0 پاسخ 3.1هزار بازدید
...