【发布时间】:2021-01-09 11:27:37
【问题描述】:
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的返回值。存储在n中的值无效,除非scanf返回成功,在这种情况下返回值为1。 -
你必须像
int n = 0;一样初始化n。否则它的值是随机的(非零)。 -
这是未定义的行为。
int n尚未初始化,scanf()尚未设置任何值。今天的true是明天的false。 -
“即使 n==0 中有 0” - 谁说的?你当然没有。由于它们的声明方式(没有初始化),
n和i在明确分配值之前都是indeterminate(例如从scanf成功填充,您应该验证)。
标签: c if-statement