继续演怪异吗?

时间:2018-06-20 18:39:35

标签: c operating-system signals

我遇到了以下代码:

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语句(这是一种不好的做法)。但是当我这样做时 它导致我的程序无法正常运行,它是某种俄罗斯方块游戏的跑步程序。我所做的就是用这个替换continue:

if(write(fd[1], &c, 1) < 0) {
    sysCallFailureProcedure();
}
kill(pid, SIGUSR2);

if (c == QUIT_KEY) {
    hasNotQuitted = false;
}

表示继续后面的代码。 谁能告诉我我想念什么?

1 个答案:

答案 0 :(得分:1)

我认为,不良做法不在于“继续”,而在于使用!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;
        }
    }
}