اطلاعیه

Collapse
No announcement yet.

اشکال در اجرای برنامه

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    اشکال در اجرای برنامه

    به نام سلام
    برنامه زیر برای خواندن کاراکتر از ورودی نوشته شده است.اما یک warning از دستور ch=cin.get();می دهد که نمی دانم باید چکار کنم.
    لطفا راهنمایی ام کنید.
    با سپاس


    <include <iostream.h#
    <include <conio.h#
    int main()
    {
    char ch;
    cout<<"Enter a character:";
    ch=cin.get();
    cout<<"You typed character:"<<ch;
    getch();
    return 0;
    }

    Warning: Conversion may lose significant digits

    زیبا باش و بخند بر هرآنچه زشتی است،چرا که تنهاترین شان تو ،زیبایی است.

    #2
    پاسخ : اشکال در اجرای برنامه

    نوع ch رو به int تغییر بده. برای فهمیدن مشکل یادت باشه که اولا نوع برگشتی تابع فوق int هست و ثانیا این تابع ممکنه EOF برگردونه. که این مقدار؛ چیزی جدای مقدار 0 تا 255 هست. پس به بیش از یک بایت برای ذخیره اطلاعاتش احتیاج هست.

    دیدگاه


      #3
      پاسخ : اشکال در اجرای برنامه

      نوشته اصلی توسط رضا آقازاده
      نوع ch رو به int تغییر بده. برای فهمیدن مشکل یادت باشه که اولا نوع برگشتی تابع فوق int هست و ثانیا این تابع ممکنه EOF برگردونه. که این مقدار؛ چیزی جدای مقدار 0 تا 255 هست. پس به بیش از یک بایت برای ذخیره اطلاعاتش احتیاج هست.
      با سلام وتشکر از اینکه وقت گذاشته وپاسخ دادید.
      اما چند نکته وجود دارد:
      1-اگر نوع ch را به فرم int تغییر دهم،بجای خود کاراکتر،کداسکی آنرا چاپ می کند.
      2-برنامه فوق بسیار ساده است اما مشکل من در ایجاد Warning فوق در برنامه هایی است که از cin.get برای خواندن کاراکتر ورودی استفاده می شود.
      3-اینکه بیان کردید تابع ممکنه Eof برگردونه یعنی چی؟
      ممنون میشم راهنمایی ام کنید.
      با سپاس ودرود فراوان
      زیبا باش و بخند بر هرآنچه زشتی است،چرا که تنهاترین شان تو ،زیبایی است.

      دیدگاه


        #4
        پاسخ : اشکال در اجرای برنامه

        مواقعی هست که علاوه بر مقادیری که منتظرش هستیم بگیریم و کاری که انتظار وقوعش رو داریم شرایطی پیش میاد که ممکنه سهوا پیش بینی نکرده باشیم. مثلا در هنگام خوندن اطلاعات از یک فایل (من جمله کیبرد) ممکنه هیچ اطلاعاتی نشه خوند و برای اینکار سیستم باید از مکانیسمی برای هشدار این حالت استفاده کنه. خیلی جاها ممکنه از مکانیسم "استثنا" استفاده بشه. ولی در اینجا از برگرداندن یک مقدار غیر معمول استفاده میکنه. مقدار 1- یا با نام سمبلیک EOF. و نه eof یا Eof. بنابراین بازه اطلاعات ما دیگه 0 تا 255 نیست و یک مقدار اضافی (حداقل در این مورد) داره که مجبوریم از یک متغیر با دامنه بالاتر استفاده کنیم. البته میشد از short هم استفاده کنه. اما فرم استاندارد int هست.
        در هنگام خوندن بعد از خوندن باید چک بشه آیا شرایط خاصی مثل همین EOF پیش اومده یا خیر. در صورت پیش نیومدن شما میتونین با یک cast مثلا با قرار دادن (char) قبل از متغیر مربوطه در خروجی cout به سیستم بفهمونین که این یک کاراکتر هست که داخل int ریخته شده. یا اینکه از روز اول چشمهاتون رو روی خطاها ببندین و متغیر تون رو با یک cast به char تبدیل کنین. در اینصورت اگر مقدار برگشتی EOF باشه برنامه شما اون رو به عنوان کاراکتر 255 فرض میکنه. که البته دیگه مشکل خودتونه.

        دیدگاه


          #5
          پاسخ : اشکال در اجرای برنامه

          char ch را به unsigned char ch تغییر بدین

          دیدگاه


            #6
            پاسخ : اشکال در اجرای برنامه

            نوشته اصلی توسط amir-ak
            1-اگر نوع ch را به فرم int تغییر دهم،بجای خود کاراکتر،کداسکی آنرا چاپ می کند.
            برای چاپ کاراکتر بنویسید :

            cout<<"You typed character:"<<(char)ch;

            دیدگاه


              #7
              پاسخ : اشکال در اجرای برنامه

              با سپاس فراوان از تمامی دوستانی که پاسخ داده وراهنمایی ام کردند.
              پیشنهاد استفاده از type casting پیشنهاد مفید وسازنده ای است اما
              1-چگونه می توان فهمید که آیا EOF رخ داده است یا نه؟آیا Warning ای که نوشتم مبین بروز EOF است؟
              آیا میتوان مشکل EOF را برطرف نمود؟اگر پاسخ مثبت است،چگونه؟
              2-چگونه می توان دریافت که اشکال اصلی در بروز چنین خطاهایی از کجاست؟آیا می توان به جای استفاده از راههای میانبری چون tyep castingخود اشکال Warning یاError ایجاد شده را برطرف نمود.
              می دونم زیاد سوال پرسیدم،اما دوست دارم بیشتر بدانم وممنون میشم که به من بیاموزید.اگر کتاب یا منبعی برای درک بهتر پرسش های فوق وجود دارد معرفی کنید(این را از آنجهت گفتم که مزاحم وقت دوستان نشوم،والا واقف به دانش وگاهی شما عزیزان هستم)
              با سپاس ودرود فراوان
              زیبا باش و بخند بر هرآنچه زشتی است،چرا که تنهاترین شان تو ،زیبایی است.

              دیدگاه

              لطفا صبر کنید...
              X