[英]Evaluation of the if condition in c as true or false
int n,i;
scanf("%d",&n);
if(n==0)
printf("a");
else if (!(n>=1))
printf("b");
当我将输入作为 m 时,条件 (n==0) 的评估结果为真。 当条件是有效表达式且非零时,则为真。 当我用 i 替换 n 并提供相同的输入时,条件 n==0 被评估为假。 为什么会这样?。 为什么即使 n==0 中有 0 也评估为真?
scanf()
的定义没有说明它将对无法分配的 arguments 的值做什么,但在实践中,它总是保持不变。
在这种情况下, n
和i
都被统一化并且可能包含任何值 - 在你的情况下, n
在你尝试它的那一刻碰巧包含零,但这不是给定的 - 它是undefined 。 C 运行时不需要使用auto
存储 class(本地,非static
)将变量初始化为零。
int n = 0;
int i = 0;
另请注意, sscanf()
返回导致成功分配的格式说明符的数量,因此您可以例如:
while( scanf("%d",&n) == 0 )
{
// wait until valid input
}
这比仅依赖“默认”值的初始化更安全,因为scanf()
严格不保证它在任何情况下都不会修改参数 - 这只是一个不寻常的实现。 同样在实践中,您通常希望以一种或另一种方式处理错误输入,而不是简单地忽略它并使用默认值。 如果需要,提供默认值的一种安全且明确的方式是:
if( scanf("%d",&n) == 0 )
{
n = 0 ;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.