【发布时间】:2021-08-20 17:01:04
【问题描述】:
您好,我目前正在做一个编程练习,我想确定一些事情。
这是关于 if 语句的否定,像这样:if(!(condition)),if 语句的否定和 not 有什么区别?这是一个程序示例,它通过 if(!(condition)) 而不是 if(condition) 给了我想要的结果。
这是函数,这个函数的目的是检查字符串是否为数字。这个功能我已经测试过了。
bool check_key(char* key){
for(int i =0; i <strlen(key); i++)
{
if(!isdigit(key[i]))
return false;
}
return true;
}
但是这个版本为什么不行?
bool check_key(char* key){
for(int i =0; i <strlen(key); i++)
{
if(isdigit(key[i]))
return true;
}
return false;
}
我错过了什么吗?
对不起,如果我的英语不好,我不是本地人。
【问题讨论】:
-
例如,如果我输入字符串“4xx”,它将被返回为真并被无否定函数视为数字,而否定函数将返回字符串为假而不考虑字符串作为数字。
-
拿一支笔和一张纸复习一下程序。对于
"4xx",第一次迭代条件为真,所以return true被立即调用,所以函数返回真。 -
取决于返回类型,
isdigit()返回一个 int,因此否定等于if (isdigit(key[i]) == 0... 因此,在您退出后,它在第二种情况下不会按预期工作,如果条件为真,而您可能需要比较更多字符... -
第一个停止检查并在看到第一个非数字时返回。第二个在看到第一个数字时停止检查并返回。
-
这类似于De Morgan's law。这就像问为什么
a || b不等于!(!a || !b)。
标签: c loops if-statement c-strings negation