我正在尝试使用 setjmp/longjmp 做一些简单的事情:要求用户多次按 Enter 键,如果用户插入其他内容,它将使用 longjmp 重新启动进程。
我正在使用一个计数器来检查它是否有效,这个计数器在开始时为 0,但是当使用 longjmp 时,计数器从 1 重新开始。
#include <stdio.h>
#include <setjmp.h>
jmp_buf buffer;
char inputBuffer[512];
void handle_interrupt(int signal) {
longjmp(buffer, 0);
}
int main(int argc, const char * argv[]) {
int counter = 0;
counter = setjmp(buffer); // Save the initial state.
printf("Counter: %d\n", counter);
printf("\nWelcome in the jump game, press enter (nothing else!): \n");
while (fgets(inputBuffer, sizeof(inputBuffer), stdin)) {
if (*inputBuffer == '\n') { // If user press Enter
counter++;
printf("%d\n\n", counter);
printf("Again: \n");
} else {
handle_interrupt(0);
}
}
}
输出:
pc3:Assignement 3 ArmandG$ ./tictockforever
Counter: 0
Welcome in the jump game, press enter (nothing else!):
1
Again:
2
Again:
StackOverflow
Counter: 1
Welcome in the jump game, press enter (nothing else!):
2
Again:
我知道这段代码很傻,我只是想在一个简单的例子中使用 setjmp/longjmp。