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 を使用しようとしています。