繁体   English   中英

将 c 中的 if 条件评估为真或假

[英]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 的值做什么,但在实践中,它总是保持不变。

在这种情况下, ni都被统一化并且可能包含任何值 - 在你的情况下, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM