我有這樣的代碼,但這裏的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++;
}
}
我有這樣的代碼,但這裏的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++;
}
}
此:
char data = "23+100";
真不該沒有編譯過。
它應該是:
const char *data = "23+100";
這將使atoi(data[i]);
甚至更少正確比以前。
此外,你不應該在這樣的子字符串上使用atoi()
。也許你應該看看sscanf()
或strtok()
,或者(也許最好,如果我明白你正確之後)strtol()
。
後者允許您解析一個long
整數,直到找到一個非數字字符,並且還可以讓您找出調用後的哪個字符。
data [i]甚至不是子字符串...它是單個字符,子字符串將是&data [i] ...並且在任何情況下都會出錯:) – Jekyll
jeklly 您想要我首先存儲單個字符,然後傳遞給atoi? – user3250373
'strtol'函數在這裏可以很方便。它掃描你的字符串,直到第一個非數字(在這種情況下爲+)。 –
數組初始化錯誤,可能是要麼
char data[] = "23+100"
或開卷告訴
const char *data = "23+100"
還有一件事你的經歷的陣列可能是錯誤的邏輯。
只要+
遇到循環結束後和100 won't
轉換和push'd壓入堆棧(希望你努力做到這一點)
看一看的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) ;
}
打開所有編譯器警告。 –
這是甚麼編譯?或者說,你的意思是行不通的? – FatalError
縮進你的代碼。 –