نمایش نتایج 1 تا 4 از 4

نام تاپیک: به دست آوردن خطا با استفاده از errno

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    135

    به دست آوردن خطا با استفاده از errno

    با سلام

    من توسط تابع ttoi_ یک مقدار string را به عدد بر می گردانم.

    ابتدا می خواهم بدانم چه موقع خطا رخ می دهد.
    مثلا یک مورد هنگامی است که یک مقدار NULL به تابع پاس شود.

    مورد بعد اگر کاربر یک مقدار نا معتبر را وارد کند مثلا حروف را چگونه می توان با استفاده از errno این خطا را بفهمیم؟

  2. #2

    نقل قول: به دست آوردن خطا با استفاده از errno

    شما زیاد نباید همیشه به خطاهایی که errno یا توابع بر می گرداند توجه کنید یا فقط از آن ها استفاده کنید.
    همواره کدی بنویسید که مثلا اگر کاربری قرار است عددی را از یک EditBox وارد کند اصلا اجازه وارد کردن حروف یا کارکترهای غیر مجاز را نداشته باشد. یعنی قبل از تبدیل، تست ها را انجام دهید. مثلا برای اعداد اعشاری بیش از یک نقطه غیر مجاز هست و ...

    در هر حال خطاها معمولا همان هایی هستند که در بخش return یا remark در MSDN ذکر شده اند. اما ممکن هست در مواردی سایر خطا ها که در لیست errno ذکر شده است نیز برگردانده شود. پس بهتر هست فقط همان ERANGE برای خارج از بازه و EINVAL برای سایر موارد اشتباه را در نظر بگیرید.

    اگر می خواهید کنترل بیشتری روی خطا داشته باشید از strtol استفاده کنید که رشته خطا داده شده را نیز بر می گرداند.

  3. #3
    کاربر دائمی
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    135

    نقل قول: به دست آوردن خطا با استفاده از errno

    با سلام

    مشکل بنده به این شکل است که در Edit خود چند اطلاعات از کاربر می گیرم و کاربر اطلاعات را با space از هم جدا می کند و بعضی از این اطلاعات حرفی و بعضی دیگر عددی (از جنس صحیح و اعشاری) می باشد. بنابراین من نمی توانم جلوی کاربر را در ورود اطلاعات غیر عددی بگیرم.
    در ثانی اطلاعاتی را که کاربر وارد می کند ابتدا 2 عدد صحیح سپس یک عدد اعشاری و یک حرف و دوباره اعداد صحیح و ... برای تفسیر اطلاعات از strtok استفاده می کنم.

    اگر کاربر اشتباها یک مورد را فراموش کند در بعضی موارد به جای تفسیر عدد یک رشته را به عدد بر می گرداند و حاصل تبدیل 0 است و متوجه برنامه error نمیشود. می خواستم ببینم چگونه یک مقدار invalid را تشخیص دهم؟

  4. #4

    نقل قول: به دست آوردن خطا با استفاده از errno

    این موضوع دقیقا می شود ساختار یک کامپایلر، پس شما باید تشخیص دهید عدد هست یا رشته و کجا کاربر اشتباه وارد می کند(پس از ورود داده ها).
    وظیفه شما این است که تک تک قطعه رشته ها را که بین دو space هست از EditBox بخوانید. سپس تشخیص دهید چه نوعی هست و بعدبا توجه به نوعشان، تبدیل ها را انجام دهید.

    مثلا دومین مورد عدد صحیح هست و کاربر اشتباها 435a وارد می کند، اولین حرف رشته را بررسی می کنید که آیا اصلا عدد هست یا نه. (با isdigit یا istdigit_ ) سپس برای عدد، وقتی با strtol آن را تبدیل کنید پارامتر دوم این تابع، رشته a را به عنوان خطا بر می گرداند و شما هم به کاربر پیام می دهید عدد را اشتباه وارد کرده اید یا a اضافی هست.

    برای عدد اعشاری از strtod استفاده کنید.

    مثلا سومین مورد یک کارکتر هست و بین دو space کارکتر F بدست می آید، طبق روال عادی مجددا اولین حرف رشته را چک می کنید با isdigit که معلوم می شود عدد نیست، این بار باز هم چک می کنید که آیا حرف هست یا خیر اشتباها سایر کارکترها (با iswalpha برای a-z) اگر بود آن را مستقیم رشته یا کارکتر در نظر می گیرید.

    TCHAR str[] = TEXT("text");

    if (iswalpha(str[0])) // check iswupper and iswlower too
    // It is a string or a character
    else
    // It is a number


    پس در اینجا ما اصلا کاری به خطاهای برگردانده شده نداشتیم. مثلا تنها برای overflow می توانید از errno توسط ERANGE استفاده کنید. (برای توابع ذکر شده فوق)

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •