我在使平衡括號檢查器正常工作時遇到了一些麻煩。我的錯誤是在下面的代碼C平衡括號檢查器
//while the input is not EOF, take in values.
while (input[i] != '\0') {
//IF input is an opener, push onto stack
if (input[i] == '{' ||
input[i] == '[' ||
input[i] == '(' ||
input[i] == '<') {
push(&st2, input[i]);
} else if (input[i] == '}' ||
input[i] == ']' ||
input[i] == ')' ||
input[i] == '>') {
if (isEmpty(st2)) {
balance = 0;
break;
}
}
//if input is a closer
if (!((input[i] == '}' && top(st2) == '{') ||
(input[i] == ']' && top(st2) == '[') ||
(input[i] == ')' && top(st2) == '(') ||
(input[i] == '>' && top(st2) == '<'))) {
balance = 0;
break;
}
i++;
errorpos = i;
if (input[i] =='\0') {
if (!isEmpty(st2)) {
balance = FALSE;
}
}
}
我的堆棧實現和獲取用戶值工作正常,但條件不。例如,如果我要輸入{
作爲輸入,則{
會被壓入堆棧頂部,但在while循環之後它不會檢查堆棧是否爲空。我試圖在while
循環之外移動isEmpty
評估來查看這是否是問題,但它的行爲相同。基本上,不管我輸入什麼,表達式都被認爲是平衡的,所以在我看來,我的條件是錯誤的,但我無法弄清楚在這裏做什麼。
由於有這麼多的問題初學者:爲什麼不正確格式化你的代碼開始?不保證立即解決您的問題,但它肯定會幫助您和其他人更好地瞭解您的代碼中發生了什麼。 – 5gon12eder
darn;只是在我看到5gon12eder的評論之前重新對代碼進行了格式化...他們如此正確 –
您需要將註釋和註釋代碼納入考慮,其中括號可能不會平衡。你還應該忽略字符串文字和字符值賦值的內容,比如'char c ='[';'。 –