以下代码用于将多个连续空格替换为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;
}
}
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚为什么这个不是,只是在内部循环和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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以不用花括号括起一个循环吗?我已经读到第二个是一个很好的做法,让它可读,但我做错了什么?
两者之间的唯一区别是else.没有大括号,它会跨越完整语句的结尾,这是;下一行,即下一行:
else
putchar(ch); /* end of else */
lastch = ch; /* outside of if-else */
Run Code Online (Sandbox Code Playgroud)
有了括号,它也涵盖了lastch作业.
这同样适用于if声明,但是你只有一行,所以没有区别.