計算機科学のブログ

Cを始める - Cの世界に飛び込む - do-while文, continue

Head First C ―頭とからだで覚えるCの基本David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 1章(Cを始める - Cの世界に飛び込む)、p.34(ごちゃごちゃのメッセージ)の解答を求めてみる。

コード

main.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 'X':
            continue;
        default:
            val = atoi(card_name);
            if (val < 1 || 10 < val)
            {
                puts("invalid input");
                continue;
            }
            break;
        }
        if (val > 2 && val < 7)
        {
            count++;
        }
        else if (val == 10)
        {
            count--;
        }
        printf("現在のカウント:%i\n", count);
    } while (card_name[0] != 'X');
}

入出力結果(Terminal, Zsh)

% cc main.c && ./a.out
カード名を入力してください:
0
invalid input
カード名を入力してください:
1
現在のカウント:0
カード名を入力してください:
2
現在のカウント:0
カード名を入力してください:
3
現在のカウント:1
カード名を入力してください:
4
現在のカウント:2
カード名を入力してください:
5
現在のカウント:3
カード名を入力してください:
6
現在のカウント:4
カード名を入力してください:
7
現在のカウント:4
カード名を入力してください:
8
現在のカウント:4
カード名を入力してください:
9
現在のカウント:4
カード名を入力してください:
10
現在のカウント:3
カード名を入力してください:
Jack
現在のカウント:2
カード名を入力してください:
invalid input
カード名を入力してください:
J
現在のカウント:1
カード名を入力してください:
Q 
現在のカウント:0
カード名を入力してください:
K
現在のカウント:-1
カード名を入力してください:
14
invalid input
カード名を入力してください:
X
%