【发布时间】:2018-06-20 18:39:35
【问题描述】:
我遇到了这个代码:
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;
}
意思是跟在 continue 后面的代码。 谁能告诉我我错过了什么?
【问题讨论】:
-
谁告诉你
continue是不好的做法?它是工具箱中的一个工具,就像该语言的其他功能一样。 -
你在第一次测试之前不会初始化
hasNotQuitted,所以你不知道你的循环是否会退出。 -
您可以根据需要将其删除,然后将循环的其余部分放入
else{...}?我认为这更具可读性 -
enum Bool hasNotQuitted;- 这确实是一种不好的做法。你有一个标准的bool类型。 -
但要回答您的问题,您需要更改
if语句的逻辑。如果isAlegalKey()为真,continue之后的所有内容将执行,因此将if (!isAlegalKey(c)) {更改为if (isAlegalKey(c)) {,您替换continue的内容将执行。
标签: c operating-system signals