gpt4 book ai didi

c - 判断条件语句中的单个语句为真

转载 作者:太空狗 更新时间:2023-10-29 15:13:54 25 4
gpt4 key购买 nike

我有很多信号,可以是真、假或无效,但其中只有一个可以为真,否则就是错误。

我想知道是否有一种方法可以轻松地检查这个而不需要做一个大的 if 语句

enum sig_type
{
sig_invalid, sig_true, sig_false
};

sig_type sig1 = GetSignal("sig1");
sig_type sig2 = GetSignal("sig1");
sig_type sig3 = GetSignal("sig1");
sig_type sig4 = GetSignal("sig1");

if (sig1 == sig_true)
{
if (sig2 == sig_true || sig3 == sig_true || sig4 == sig_true)
{
// Error
}
}
else if (sig2 == sig_true)
{
if (sig1 == sig_true || sig3 == sig_true || sig4 == sig_true)
{
// Error
}
}

等等... 这是大量的代码,并且只会随着我添加信号而增加,因此在这种状态下将无法管理

最佳答案

您可以利用 C 中逻辑表达式的计算结果为 0 表示假或 1 表示真这一事实,并将它们加在一起。如果总数大于 1,则有错误,否则没有错误。

另外,如果您认为将来可能需要更多(或只是数量可变的)信号,我会使用数组来保存它们,而不是单独的变量。然后可以在 for 循环中完成测试:

sig_type sig[NSIGNALS];
int t = 0;

for (int i = 0; i < NSIGNALS; ++i) {
char buf[50]; /* Make sure your buffer is large enough, of course */
sprintf(buf, "sig%d", i + 1); /* Or however you want to generate it */
sig[i] = GetSignal(buf);
t += sig[i] == sig_true;
}

if (t > 1) {
/* Complain */
}

如果您的意思是只有 1 个信号必须为真,请将 t > 1 测试替换为 t != 1

编辑:最初在错误处理程序中有一个throw,尽管那不是 C。

关于c - 判断条件语句中的单个语句为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24507574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com