我遇到过这段代码:
int main() {
int fd[2];
pipe(fd);
int pid;
if ((pid = fork()) < 0) {
sysCallFailureProcedure();
}
if (pid == SON_PROCESS) {
dup2(fd[0], 0);
execlp(TETRIS_DISP_NAME, TETRIS_DISP_NAME, NULL);
sysCallFailureProcedure();
}
char c;
enum Bool hasNotQuitted;
while (hasNotQuitted) {
c = getch();
if (!isAlegalKey(c)) {
continue;
}
if(write(fd[1], &c, 1) < 0) {
sysCallFailureProcedure();
}
kill(pid, SIGUSR2);
if (c == QUIT_KEY) {
hasNotQuitted = false;
}
}
return OPERATION_SUCCEEDED;
}
我正在尝试改进它并丢失 continue 语句(这是一个不好的做法)。但当我这么做的时候, 它导致我的程序无法正常运行,它是某种俄罗斯方 block 游戏的运行程序。我所做的就是将 continue 替换为:
if(write(fd[1], &c, 1) < 0) {
sysCallFailureProcedure();
}
kill(pid, SIGUSR2);
if (c == QUIT_KEY) {
hasNotQuitted = false;
}
表示继续后面的代码。 谁能告诉我我错过了什么?
最佳答案
我认为不好的做法不在于“继续”,而在于使用 !isALegalKey 构造。这更具可读性/清晰。
while (hasNotQuitted) {
c = getch();
if (isAlegalKey(c)) {
if(write(fd[1], &c, 1) < 0) {
sysCallFailureProcedure();
}
kill(pid, SIGUSR2);
if (c == QUIT_KEY) {
hasNotQuitted = false;
}
}
}
关于继续表现怪异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50955009/