2014-04-05 44 views
0

我正在C++控制檯中編寫一個基本轉換程序,我使用argv [1]和argv [2]爲 輸入數字& base。檢查整數除以零的錯誤

 #include "stdafx.h" 
    #include <iostream> 
#include <cstdlib> 
    #include <time.h> 
#include <math.h> 
#include <errno.h> 
using namespace std; 
const double MAXRANGE = pow(2.0,16.0); // 65536 
const double MINRANGE = -pow(2.0,16.0); 

    int main(int argc, char *argv[]) 
{ 

int result; 

if(atof (argv[1]) > 65536) 
{ 
cout << "R" << endl; 
return 0; 
    } 

    if(atof (argv[1]) < -65536) 
    { 
cout << "R" << end; 
return 0; 
    } 


    if(atof (argv[2]) > 65536 || (atof(argv[2]) < -65536)) 
    { 
cout << "R" << endl; 
return 0; 
    } 


    int no,base,i; 
    no=atoi(argv[1]); 
    base=atoi(argv[2]); 


     if (argc == 3) 
     { 
    if(argv[2][0]=='b' && argv[2][1]=='2') 
    { 
     cout<<"V"<<endl; 

     return 0; 
     } 

     i= no % base; 
     no=no/base; 
     cout<<i; 

       } 

      return (0); 
      } 

和我這是在lab1.exe在0x012851BE

未處理的異常錯誤:整數除零:0xC0000094。

我知道這個錯誤即將到來,因爲我已經使零條件。但我不知道,肯定的是,我不知道如何現在做錯誤檢查。 我也曾嘗試另一個代碼

  if(strcmp("b2",argv[2]==0 || strcmp("b3",argv[2]==0) 

但仍然拿出了同樣的錯誤。

那麼,我該如何對argv [2]基數進行錯誤檢查?用戶必須輸入argv [2],這是基礎的,我想檢查argv [2]必須是'b1','b2','b3'等..到'b16'。

謝謝!

+3

這是'你是base'除以'strcmp'相等檢查中不相關的0。 – chris

+0

@chris是的,我可以理解這個錯誤,但是我怎麼能接近錯誤檢查!thx! –

+0

當'argv [2] ==「b2」'這次調用'base = atoi(argv [2])'時,你會期望base是什麼?提示,這不是傳遞給'atoi'的有效字符串。 –

回答

0

你應該對零相應的部門或throwm捕前檢查的基礎和處理您的零除例外,即:

if (!base) { 
    ... 
    // or early return depending on your use case 
} else { 
    i = no % base; 
    no=no/base; 
} 

或:

try { 
     ... 
     if (!base) 
      throw std::overflow_error("Divide by zero exception"); 
     i = no % base; 
     no=no/base; 
    } catch (std::overflow_error e) { 
     ... 
    } 
+0

我有點得到它,但正如你看到我的代碼很簡單。我只是一個初學者,你能告訴我如何使用if語句對argv [2]進行錯誤檢查嗎?謝謝! :) –

+0

爲什麼你會檢查argv [2]當零是基地?您是否在某些未顯示的代碼中將基礎初始化爲argv [2]? – lpapp

+0

是的!對不起,用戶必須在命令行輸入「b1」,「b2」等。所以我需要檢查有效的輸入「b1」,「b2」等.. –