gpt4 book ai didi

C 编程 - 关于花括号的困惑

转载 作者:行者123 更新时间:2023-12-04 11:02:35 31 4
gpt4 key购买 nike

以下代码用于将多个连续的空格替换为1个空格。虽然我设法做到了,但我对花括号的使用感到困惑。

这个实际上运行良好:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch, lastch;
lastch = 'a';
while((ch = getchar())!= EOF)
{

if(ch == ' ')
{
if (lastch != ' ')
putchar(ch);


}
else
putchar(ch);
lastch = ch;

}
}

但我无法弄清楚为什么这个不是,只通过将大括号放在内部循环和 else 语句中:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch, lastch;
lastch = 'a';
while((ch = getchar())!= EOF)
{

if(ch == ' ')
{
if (lastch != ' ')
{
putchar(ch);
}

}
else
{
putchar(ch);
lastch = ch;
}
}
}

我不能用大括号将循环括在循环中吗?我读到第二个是使其可读的好习惯,但我做错了什么?

最佳答案

两者之间的唯一区别是else 的范围。没有大括号,它一直跨越到完整语句的末尾,即下一个 ;,即下一行:

else
putchar(ch); /* end of else */
lastch = ch; /* outside of if-else */

有了大括号,它也覆盖了 lastch 赋值。

这同样适用于 if 语句,但是只有一行,所以没有区别。

关于C 编程 - 关于花括号的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30973271/

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