C语言字符输入判断异常:输入括号却触发退出逻辑求助
问题原因与修复方案
你的代码问题出在if条件的逻辑运算符使用错误:
原代码里用了||(逻辑或),这意味着只要data不等于任意一个合法括号,整个条件就会成立。比如当你输入(时,data != ')'是真,||连接的条件只要有一个为真就整体为真,所以必然会进入退出分支。
正确的逻辑应该是:当data同时不等于所有合法括号时,才执行退出。这时候需要用&&(逻辑与)来连接所有不等于的判断。
修正后的代码如下:
printf("Enter only parenthesis to arr or anything else to exit\n"); scanf(" %c", &data); if (data != '(' && data != ')' && data != '[' && data != ']' && data != '{' && data != '}') { printf("\nExit scanning \n"); return; }
如果想用getchar()替代scanf,逻辑是完全一致的,只需把输入部分换成data = getchar();,同时可以额外处理输入缓冲区的换行符(比如用getchar()吃掉多余的换行),但核心还是要修正if条件的逻辑运算符。
内容的提问来源于stack exchange,提问作者Trubadurpoman
相关产品推荐
相关产品推荐

