2014-03-04 71 views
0

我有這樣的代碼,但這裏的atoi完全不 工作,如果我給基地址,然後還它會導致概率使用的atoi的

int main() 
{ 
    char *token; 
    int value; 
    char data = "23+100"; 
    int i = 0; 
    while(data[i] != '+') 
    { 
     value = atoi(data[i]); 
     push(value,&top1); 
     i++; 
    } 
} 
+2

打開所有編譯器警告。 –

+3

這是甚麼編譯?或者說,你的意思是行不通的? – FatalError

+0

縮進你的代碼。 –

回答

1

此:

char data = "23+100"; 

真不該沒有編譯過。

它應該是:

const char *data = "23+100"; 

這將使atoi(data[i]);甚至更​​少正確比以前。

此外,你不應該在這樣的子字符串上使用atoi()。也許你應該看看sscanf()strtok(),或者(也許最好,如果我明白你正確之後)strtol()

後者允許您解析一個long整數,直到找到一個非數字字符,並且還可以讓您找出調用後的哪個字符。

+2

data [i]甚至不是子字符串...它是單個字符,子字符串將是&data [i] ...並且在任何情況下都會出錯:) – Jekyll

+0

jeklly 您想要我首先存儲單個字符,然後傳遞給atoi? – user3250373

+0

'strtol'函數在這裏可以很方便。它掃描你的字符串,直到第一個非數字(在這種情況下爲+)。 –

0

數組初始化錯誤,可能是要麼

char data[] = "23+100"

或開卷告訴

const char *data = "23+100"

還有一件事你的經歷的陣列可能是錯誤的邏輯。

只要+遇到循環結束後和100 won't轉換和push'd壓入堆棧(希望你努力做到這一點)

0

看一看的strtol功能。以下示例顯示瞭如何使用它。

int main() 
{ 
    char *token; 
    int value; 
    char *data = "23+100-2*7"; 
    int i = 0; 
    char *endp ; 
    token = data ; 

    do 
    { 
    value = strtol(token, &endp, 10) ; 
    token = endp + 1 ; 
    printf ("value: %d\n", value) ; 

    if (*endp != 0) 
     printf ("operator: %c\n", *endp) ; 

    } while (*endp != 0) ; 
}