簡體   English   中英

C-做while循環不會停止運行

[英]C - do while loop won't stop running

我試圖在xCode中運行“編程語言:Kenneth C. Louden的原理和實踐”中的源代碼,由於某些原因,while循環僅在用戶輸入數字時停止。 對於其他所有情況,while循環都會繼續運行。 有這樣做的理由嗎?

typedef enum {TT_PLUS, TT_TIMES, TT_LPAREN, TT_RPAREN, TT_EOL, TT_NUMBER, TT_ERROR} TokenType;

int numVal; /*computed numeric value of a NUMBER token */
int currChar; /*current character*/

TokenType getToken(){
    while (currChar == ' '){ //Skips blanks
        currChar = getchar();
    }
    if (isdigit(currChar)){
        numVal = 0;
        while (isdigit(currChar)){//Compute numeric value
            numVal = 10 * numVal + currChar - '0';
            currChar = getchar();
        }
        return  TT_NUMBER;
    }
    else{ //recognize a special symbol
        switch (currChar){
            case '(': return TT_LPAREN; break;
            case ')': return TT_RPAREN; break;
            case '+': return TT_PLUS; break;
            case '*': return TT_TIMES; break;
            case '\n': return TT_EOL; break;
            default: return TT_ERROR; break;
        }

    }
}

int main() {
    //printf("Print tokens to scan:\n");
    TokenType token;
    currChar = getchar();

    do {
        token = getToken();
        switch(token){
            case TT_PLUS: printf("TT_PLUS\n"); break;
            case TT_TIMES: printf("TT_TIMES\n"); break;
            case TT_LPAREN: printf("TT_LPAREN\n");break;
            case TT_RPAREN: printf("TT_RPAREN\n");break;
            case TT_EOL: printf("TT_EOL\n"); break;
            case TT_NUMBER : printf("TT_NUMBER: %d\n",numVal);break;
            case TT_ERROR : printf("TT_ERROR: %c\n", currChar); break;
        }
    }while (token != TT_EOL);
    return 0;
}

只需將getToken請求的while循環替換為:

do {
    currChar = getchar();
} while (currChar == ' ');

似乎為我做...倆...

因此,問題似乎是由您的詞法分析器卡住反復讀取同一令牌引起的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM