2014年2月27日木曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の10章(プロセス間通信)、長いエクササイズ(p.460)を解いてみる。

その他参考書籍

長いエクササイズ(p.460)

コード(BBEdit, Emacs)

sample460.c

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
#include <errno.h>
#include <signal.h>

int score = 0;

void end_game(int sig)
{
    printf("\n最終得点: %i\n", score);
    exit(0);
}

int catch_signal(int sig, void (*handler) (int))
{
    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, char *argv[])
{
    catch_signal(SIGALRM, times_up);
    catch_signal(SIGINT, end_game);
    while (1) {
        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);
}

Makefile

all: sample460

sample460: sample460.c
 cc -g -o sample460 sample460.c

clean:
 rm sample460

入出力結果(Terminal)

$ make
cc -g -o sample460 sample460.c
$ ./sample460

6かける10はいくつですか?60

6かける2はいくつですか?12

1かける4はいくつですか?4

0かける6はいくつですか?0

3かける1はいくつですか?3

8かける7はいくつですか?
時間切れ!

最終得点: 5
$ ./sample460

6かける10はいくつですか?60

6かける2はいくつですか?12

1かける4はいくつですか?4

0かける6はいくつですか?0

3かける1はいくつですか?3

8かける7はいくつですか?^C
最終得点: 5
$ ./sample460

6かける10はいくつですか?0

間違いです!得点: 0

6かける2はいくつですか?0

間違いです!得点: 0

1かける4はいくつですか?0

間違いです!得点: 0

0かける6はいくつですか?0

3かける1はいくつですか?0

間違いです!得点: 1

8かける7はいくつですか?
時間切れ!

最終得点: 1
$ ./sample460

6かける10はいくつですか?0

間違いです!得点: 0

6かける2はいくつですか?0

間違いです!得点: 0

1かける4はいくつですか?0

間違いです!得点: 0

0かける6はいくつですか?0

3かける1はいくつですか?0

間違いです!得点: 1

8かける7はいくつですか?^C
最終得点: 1

0 コメント:

コメントを投稿