一道程序设计题,判断作用的代码不起作用,具体内容请细看

原题:

img

img


#include<stdio.h>
#include<stdbool.h>
int main(){
char a[50],b[50];//a数组用于存储输入的字符,b数组用于存储用于判断的字符
int i=0,n,k=0;
bool flag=true;
do{
    scanf("%c",&a[i]);
    i++;
}while(a[i-1]!='@');//输入字符到数组a中
n=i;//n存储有多少个字符
for(i=0;i<=n-1;i++){
    switch('a[i]'){
    case '{':b[k]='}';k++;break;
    case '[':b[k]=']';k++;break;
    case '(':b[k]=')';k++;break;//如果出现左括号,存一个对应右括号到b数组中,同时k+1
    case '}':if(b[k]!='}')flag=false;k--;break;
    case ']':if(b[k]!=']')flag=false;k--;break;
    case ')':if(b[k]!=')')flag=false;k--;break;//如果出现右括号,判断该括号是否与b数组相应的括号对应,如果不对应返回false
    }
}
if(flag)
    printf("YES");
else
    printf("NO");
return 0;

}


最终结果总是yes,求解答

这是一道经典的栈题,用栈会很容易处理,建议题主了解一下

第14行:修改为:switch(a[i]){  ,a[i]多了 ‘ ’ .