2013-10-15 46 views
1

即時通訊嘗試確保傳遞給main的所有參數都是有效整數,如果不是,則會打印一個錯誤。例如,如果我有一個名爲總計的可執行文件,我會輸入總數1 2 3 4. 如果這是一個無效整數,我想打印一個錯誤,所以如果我輸入總數1 2 3zy,它將打印一條錯誤消息。我的代碼如下。檢查是否argv [i]是一個有效整數,傳遞主參數

1 #include <iostream> 
    2 #include<stdlib.h> 
    3 using namespace std; 
    4 
    5 bool legal_int(char *str); 
    6 
    7 int main(int argc, char *argv[]) 
    8 { 
    9 //int total = 0; 
10 for(int i = 1; i < argc; i++) 
11 { 
12 if((legal_int(argv[i]) == true)) 
13 { 
14 cout << "Good to go" << endl; 
15 } 
16 else 
17 { 
18 cerr << "Error: illegal integer." << endl; 
19 return 1; 
20 } 
21 } 
22 
23 // int value = atoi(argv[i]); 
24 //cout << value << endl; 
25 } 
26 
27 bool legal_int(char *str) 
28 { 
29 while(str != 0) // need to 
30 if((isdigit(str)))// do something here 
31 { 
32 return true; 
33 } 
34 else 
35 { 
36 return false; 
37 } 
38 } 

我需要知道的是如何索引字符串中的所有字符,並確保它們是帶有legal_int函數的數字。如果有人能指出我的方向很棒!如果需要澄清,請詢問。

回答

0
27 bool legal_int(char *str) 
28 { 
29 while(str != 0) // need to 
30 if((isdigit(str)))// do something here 
31 { 
32 return true; 
33 } 
34 else 
35 { 
36 return false; 
37 } 
38 } 

你有三個錯誤:

  1. while (str != 0)應該while (*str != 0) 。你想繼續下去,直到你在字符串中遇到零,直到字符串本身消失。

  2. if((isdigit(str)))應該是if((isdigit(*str++)))。你想看看str指向什麼,看看這是一個數字,你需要指向下一個數字。

  3. 32 return true;這應該不存在。你不想因爲你找到一個數字而返回。

+0

太棒了,我現在明白了。我的邏輯關閉了,而且我並沒有通過每個str來遞增。謝謝。 – user1940516

1

什麼:

bool legal_int(char *str) { 
    while (*str) 
     if (!isdigit(*str++)) 
      return false; 
    return true; 
} 

這是不是最好的功能,但它應該達到目的。 isdigit函數需要一個字符看如此通過*str。另一個關鍵點是你需要在循環內部增加指針。

3

當比較每一個字符,邏輯應該是,如果它是不合法的,返回false,否則繼續:

bool legal_int(char *str) 
{ 
    while (str != 0) 
    { 
     if (!isdigit(*str)) 
     { 
      return false; 
     } 
     str++; 
    } 
    return true; 
} 
相關問題