開発環境
- OS: macOS High Sierra - Apple
- IDE(統合開発環境): Xcode - Apple
- プログラミング言語: C
Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の10章(プロセス間通信 - お話は楽しい)、長いエクササイズ(p. 460)を取り組んでみる。
長いエクササイズ(p. 460)
//
// main.c
// sample1
//
// Created by kamimura on 2018/02/26.
// Copyright © 2018 kamimura. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <signal.h>
#include <stdbool.h>
#include <time.h>
int score = 0;
void end_game(int sig) {
printf("\n最終得点: %i\n", score);
exit(0);
}
typedef void (*fn_handler)(int);
int catch_signal(int sig, fn_handler handler) {
struct sigaction action;
action.sa_handler = handler;
sigemptyset(&action.sa_mask);
action.sa_flags = 0;
return sigaction(sig, &action, NULL);
}
void times_up(int sig) {
puts("\n時間切れ!");
raise(SIGINT);
}
void error(char *msg) {
fprintf(stderr, "%s: %s\n", msg, strerror(errno));
exit(1);
}
int main(int argc, const char * argv[]) {
catch_signal(SIGALRM, times_up);
catch_signal(SIGINT, end_game);
srandom((int)time(0));
while (true) {
int a = random() % 11;
int b = random() % 11;
char txt[4];
alarm(5);
printf("\n%iかける%iはいくつですか?", a, b);
fgets(txt, 4, stdin);
int answer = atoi(txt);
if (answer == a * b) {
score++;
} else {
printf("\n間違いです!得点: %i\n", score);
}
}
return 0;
}
入出力結果(Terminal)
$ ./game 8かける3は幾つですか? 時間切れ! 最終得点: 0 $ ./game 4かける10はいくつですか? 時間切れ! 最終得点: 0 $ ./game 8かける10はいくつですか? C-c C-c 最終得点: 0 $ ./game 9かける5はいくつですか?45 2かける4はいくつですか?8 1かける3はいくつですか?3 0かける1はいくつですか?0 7かける0はいくつですか?0 5かける9はいくつですか? C-c C-c 最終得点: 5 $ ./game 2かける4はいくつですか?8 8かける9はいくつですか?72 8かける8はいくつですか?64 5かける4はいくつですか?20 10かける1はいくつですか?10 6かける6はいくつですか? 時間切れ! 最終得点: 5 $
0 コメント:
コメントを投稿