我在while循环中增加了一个指针,并减少了一个计数器。我想在计数器达到零或指针等于最大点(如果存在)时退出循环。那是一部分给我的问题。
考虑以下:
char * pIt = utf8str;
char ** pEnd = 0;
size_t nVal = 10;
while ( 0 < nVal && (pEnd && pIt < *pEnd || true) )
{
--nVal;
++pIt;
}
如果
pEnd
为null,我希望将其从比较中排除,因此pIt
将没有上限。显然,上面的代码不起作用,因为当pIt >= pEnd
时,“或”开始起作用,并且始终为真。一个人怎么做?
最佳答案
好吧,让我们稍微解构一下你的情况。因此,在顶层,我们有两个部分,即计数器和迭代器,必须满足两个条件才能继续进行操作,所以我们有:
A && B
现在
A
是最简单的,那就是:nVal > 0
(至少对我来说,要在右侧进行比较是很自然的事情)。现在变得有些棘手。
pEnd
是null
且pIt
没有上限,或者pEnd
存在。意思是B == C || D
。因此,让我们。A && (C || D)
现在,如果
pEnd
为null,我们希望它为true,对吗? null是false,因此当false时我们希望为true,那么我们该怎么做? !pEnd
。那给我们C。最后我们得到D。
pIt
有一个上限。 pIt < *pEnd
。让我们放在一起,我们有:
nVal > 0 && (!pEnd || (pIt < *pEnd))
希望这可以帮助!