好的。讓我重新開始。我正在嘗試編寫一個程序來評估逆波蘭表示法的參數。 (即/程序2 4 +,其評估爲6)。ctype.h isdigit不能在argv
int main(int argc, char *argv[])
{
char oper[MAXOP];
char *ptr;
unsigned char c;
double op2;
while (--argc > 0 && ++argv != NULL) {
ptr = oper;
if (isdigit(c = **argv))
{
while (isdigit(c = **argv++))
{
*ptr++ = c;
}
*ptr = '\0';
push(atof(oper));
}
else if (isalpha(c))
{
while (isalpha(c = **argv++))
{
*ptr++ = c;
}
...
...
}
}
程序應該檢查的每個參數的第一個字符,如果它是α或數字或操作,但它總是被證明是一個alpha。
+++++++++ UPDATE +++++++++++++
嗯,這很奇怪。它現在正在工作。在條件之前, isdigit(c = **argv)
對於數字參數的計算結果不爲真(如果其餘代碼錯誤,則無關緊要)。現在確實如此,但條件isdigit(c = **argv++)
是錯誤的。
應該isdigit(c = *argv[0]++)
。
我有兩個同名的文件。他們在不同的目錄中,但包含相同的代碼。在使用這個函數時,我必須在另一個目錄中編譯另一個文件,並且因此得到相同的輸出,儘管編輯了這個文件。我的錯。
此代碼只是傷害了我的眼睛。將所有殘留的副作用移出條件並再次詢問。但是你的問題是什麼? –
真的,沒有人應該寫這樣的代碼。 – zmbq
我不認爲'** argv ++'會做你認爲它的作用(這也是你應該使用更簡單的操作的原因之一)。 –