اطلاعیه

Collapse
No announcement yet.

اشکال در دستور atoi

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

    اشکال در دستور atoi

    لطفا" در مورد دستور atoi اگر توضیح کاملی دارید کمک کنید . میدونم که این دستور متغیر char رو به int تبدیل میکنه
    میخواستم بدونم آیا در این تبدیل ممکنه که علامت ها یا اعدادی ایجاد بشه که مخفی باشند و در خروجی "دیده " نشن؟
    در برنامه ای که دارم تبدیل انجام میشه ولی نتیجه ای که مد نظر هست درست در نمیاد . لطفا" به این کد ها دقت کنید :


    کد:
     code=atoi(number2); 
     if(code==0356)
     }
    دستورات 1
    {
    else
    }
    دستورات 2
    {
    در عمل کد های دستورات 2 روی lcd نمایش داده میشه در حالی که مقدار number2 =0356 هست. سوالم اینه که آیا ممکنه در زمان تبدیل عددی غیر از 0356 ایجاد بشه که در نهایت باعث بشه شرط if درست نباشه؟

    number2 از نوع char هست و code از نوع int

    #2
    پاسخ : اشکال در دستور atoi

    سوالم اینه که آیا ممکنه در زمان تبدیل عددی غیر از 0356 ایجاد بشه که در نهایت باعث بشه شرط if درست نباشه؟
    عددی غیر از 0356 ؟؟ مگه همچین عددی هم داریم که نمیدونستیم ؟؟

    خودتون دارید میگید ascii رو به int تبدیل میکنه و تبدیل 0356(اسکی) به اینت میشه 356 نه 0356 عدد که با صفر شروع نمیشه امیدوارم مشکل حل بشه

    میتونید بر عکس عمل کنید یعنی کد رو دست نزنید و با itoa number رو تبدیل به اسکی کنید
    من دوست ندارم خودم را درگير مسئله بهشت يا جهنم بکنم ، چون در هر دو قسمت دوستان خوبي دارم !

    دیدگاه


      #3
      پاسخ : اشکال در دستور atoi

      عدد 0356 ، 4 شماره آخر یک شماره موبایل هست که توسط ماژول gsm ارسال میشه و فکر میکنم اسکی نباشه بلکه رشته هست . این تبدیل به int لازم هست چون برای تشخیص شماره تلفن باید روی متغیر int بررسی انجام بشه . کد کامل تر رو اینجا قرار میدم . ممنون از پاسختون

      کد:
      void cmgr(void)
      {
       unsigned char x;
       int code;
       for(x=0;x<3;x++)wait_to_get('"');             
       for(x=0;x<13;x++)
        {
         number1[x]=getchar();       
        } 
       for(x=10;x<14;x++)number2[x-10]=number1[x-1];                                 
       code=atoi(number2);             
       if(code==0356)
       {
       wait_to_get('#');
       for(x=0;x<4;x++)number3[x]=getchar();           
       wait_to_get('K');
       code=atoi(number3);
       if(code > 9999)code/=10;
       if(sms_location >9)
       {
       putsf(at_cmgda);
       wait_to_get('K');
       }
       lcd_clear();
       lcd_gotoxy(6,0);
       lcd_puts(number2);
       lcd_gotoxy(6,1);
       lcd_puts(number3); 
       check_request(code);
       }
       else
       {
       lcd_gotoxy(0,1);
       lcd_putsf("ERROR");
       }
      }

      دیدگاه

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