【C語言練習題】編寫一個程式,它從標準輸入讀取C原始碼,並驗證所有花括號都正確成對出現
阿新 • • 發佈:2018-12-21
《C和指標》課後練習題
問:編寫一個程式,它從標準輸入讀取C原始碼,並驗證所有花括號都正確成對出現。
程式碼
思路:在while迴圈條件中讀取我輸入的字元,只有當輸入緩衝區沒有資料或者我這裡產生回車符'\n'時,才會判斷條件不成立。counter這個變數用來標記'{ }'是否成對出現(當有'{'讀入時,counter++,當有'}'讀入時,counter--)。另外,'}'為了和前面的'{'完成配對,和最前面未配對的'{'相互匹配,這時候counter不可能是負數。最後當用戶輸入結束時(按下回車鍵),程式也根據counter是否為0,來判斷花括號是否成對出現了。
#include <stdio.h> #include <string.h> int main(void) { int ch; int counter=0; printf(">>"); while( (ch = getchar()) != EOF && ch != '\n') { if('{' == ch) { counter++; } else if('}' == ch) { counter--; } if ( counter < 0 ) { printf("input error\n"); return -1; } } if ( 0 == counter ) { printf("success!\n"); } else { printf("failed!\n"); } return 0; }
實驗結果
關於行緩衝
這裡遇到一個小插曲
本來以為當我輸入 '}' 的時候,在程式中會立即判斷執行 return ,然後退出程式。但是事實是,在我按下回車符'\n'時,才有結果顯示。
導致這種結果的原因呢,就是這個getchar函數了。
意思是,我通過按鍵輸入的字元資料不會立即被getchar這個函式處理,先儲存到一個緩衝區中。當我按下回車符'\n'後,函式getcahr再從緩衝區中一個一個讀取字元,這就是行緩衝機制。總的來說這個過程是在我回車之後進行的。