2014年1月17日金曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の1章(Cを始める)、エクササイズ(p.35)を解いてみる。

その他参考書籍

エクササイズ(p.35)

コード

cards.c

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char card_name[3];
    int count = 0;
    
    /* エクササイズの箇所 */
    do {
        puts("カード名を入力して下さい: ");
        scanf("%2s", card_name);
        int val = 0;
        switch(card_name[0]){
            case 'K':
            case 'Q':
            case 'J':
                val = 10;
                break;
            case 'A':
                val = 11;
                break;
            case 'X':
                /* ループ条件に戻って、その条件が偽になり、ループは終了 */
                continue;
            default:
                val = atoi(card_name);
                if(val < 1 || val > 10){
                    puts("エラー: K、Q、J、A、Xまたは1から10の範囲ではない。");
                    continue;
                }
        }
        if(val > 2 && val < 7){
            count++;
        } else if(val == 10){
            count--;
        }
        printf("現在のカウント: %i\n", count);
    } while (card_name[0] != 'X');
    return 0;
}

入出力結果(Terminal)

$ cc -g -o cards cards.c
$ ./cards
カード名を入力して下さい: 
-10
エラー: K、Q、J、A、Xまたは1から10の範囲ではない。
カード名を入力して下さい: 
エラー: K、Q、J、A、Xまたは1から10の範囲ではない。
カード名を入力して下さい: 
0
エラー: K、Q、J、A、Xまたは1から10の範囲ではない。
カード名を入力して下さい: 
1
現在のカウント: 0
カード名を入力して下さい: 
2
現在のカウント: 0
カード名を入力して下さい: 
3
現在のカウント: 1
カード名を入力して下さい: 
4
現在のカウント: 2
カード名を入力して下さい: 
5
現在のカウント: 3
カード名を入力して下さい: 
6
現在のカウント: 4
カード名を入力して下さい: 
5
現在のカウント: 5
カード名を入力して下さい: 
6
現在のカウント: 6
カード名を入力して下さい: 
7
現在のカウント: 6
カード名を入力して下さい: 
8
現在のカウント: 6
カード名を入力して下さい: 
9
現在のカウント: 6
カード名を入力して下さい: 
10
現在のカウント: 5
カード名を入力して下さい: 
Kn
現在のカウント: 4
カード名を入力して下さい: 
Qu
現在のカウント: 3
カード名を入力して下さい: 
Ki
現在のカウント: 2
カード名を入力して下さい: 
11
エラー: K、Q、J、A、Xまたは1から10の範囲ではない。
カード名を入力して下さい: 
X
$

0 コメント:

コメントを投稿