如何正确判断char变量非指定4字符或budget<0并终止程序?
正确实现目标逻辑的方案
你的需求是:当budget小于0,或者selection不是'G'、'B'、'P'、'O'中的任意一个时,终止程序。先明确你两次尝试的问题:
错误写法分析
第一种写法的逻辑漏洞:
if(budget < 0 || selection != 'G' || selection != 'B' || selection != 'P' || selection != 'O')用
||连接所有selection !=的条件时,无论selection是什么值,这四个条件里至少有三个为真(比如selection是'G'时,后面三个!=都成立),导致整个if表达式永远为真,完全不符合预期。第二种写法的语法逻辑错误:
if(budget < 0 || selection != ('G' || 'B' || 'P' || 'O'))在C/C++这类语言中,字符会被转换为对应的ASCII数值参与运算,
'G' || 'B' || 'P' || 'O'的结果是布尔值true(因为非0字符都视为真),等价于selection != 1,这和你要判断的“不在指定字符集合里”完全无关。
正确实现方式
基础逻辑写法
用&&连接所有selection !=的条件,表示selection同时不等于所有指定字符,再和budget < 0用||组合:
if (budget < 0 || (selection != 'G' && selection != 'B' && selection != 'P' && selection != 'O')) { // 终止程序的代码,比如return、exit等 }
更简洁的写法(C语言)
可以利用strchr函数判断字符是否在指定字符串中,需要包含头文件<string.h>:
#include <string.h> // ... if (budget < 0 || strchr("GBPO", selection) == NULL) { // 终止程序的代码 }
strchr("GBPO", selection)会返回字符在字符串中的指针,若返回NULL则说明selection不在"GBPO"里。
内容的提问来源于stack exchange,提问作者Jules
相关产品推荐
相关产品推荐

