gpt4 book ai didi

c - 我不明白打印的结果

转载 作者:行者123 更新时间:2023-11-30 18:17:19 25 4
gpt4 key购买 nike

该程序打印 6

如果我取消注释 //printf("yes"); 行,则会打印 8,但不会打印 yes

如果我删除第一个 i++; 并将该行留空,则会打印 7

如果我删除第二个 i++;,它会打印 5

错误是什么?

int main () {

int i = 3;

if (!i)
i++;
i++;

if (i == 3)
//printf("yes");
i += 2;
i += 2;

printf("%d", i);

return 0;
}

最佳答案

这个程序打印 6,但由于缩进误导,很难得到它。

目前相当于:

int main ( ) {
int i = 3;
if (!i)
{
i++;
}
i++; // this is executed whatever the previous if

if (i==3)
//printf("yes");
{
i+=2; // could be executed because printf was commented, but isn't because of the value of i
}

i+=2; // executed whatever the previous if
printf("%d", i);
return 0;
}

第二个条件:如果你留下printf注释掉,您将执行最后一个 i+=2; ,否则你将执行 i += 2声明。

因此执行了 2 次加法:一次加 1,一次加 2。

3 + 1 + 2 = 6

请注意gcc -Wall对这些情况确实有奇效(更准确地说 -Wmisleading-indentation )。在您的代码上:

test.c: In function 'main':
test.c:6:1: warning: this 'if' clause does not guard... [-Wmisleading-indentatio
n]
if (!i)
^~
test.c:8:5: note: ...this statement, but the latter is misleadingly indented as
if it is guarded by the 'if'
i++;
^
test.c:10:1: warning: this 'if' clause does not guard... [-Wmisleading-indentati
on]
if (i==3)
^~
test.c:13:5: note: ...this statement, but the latter is misleadingly indented as
if it is guarded by the 'if'
i+=2;
^

作为结论:始终用大括号保护您的条件,即使只有一条指令。这可以保护您免受:

  • 之后添加的代码(可能是由其他人添加),旨在将其添加到条件中,但失败了。
  • 定义 2 个或更多指令且不遵循 do {} while(0) 的宏模式:只有宏中的第一条指令由 if 调节

关于c - 我不明白打印的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50695635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com