C言語の航海日誌(1)

以下にも書いたように、
note103.hateblo.jp

最近はC言語の学習を進めています。

といっても、実際にはそれができるほど気持ちに余裕のある時間というのはなかなか無くて、業務をしなくていい時間があってもついダラダラしてしまいがちだったりするので、ちょっとでも進捗があればブログに残しておこうかなと。

今日(5/18・水)は以下の本から、2本、サンプルコードの写経をしました。

C言語体当たり学習 徹底入門 (標準プログラマーズライブラリ)

C言語体当たり学習 徹底入門 (標準プログラマーズライブラリ)

進捗的には、全P340ぐらいの本で、今日終わったのがP85ぐらい。
すでに一回通読しているので、前に読んだときに比べれば馴染みを感じる気もします。
というかまあ、一度Perlの基礎を見回っているので、そんなにハマりまくるということもないのですが……。

と言って早々にナンなのですが、今日写経したサンプルコード、すごくシンプルなんだけどそれでも実はハマって。

写したのはこんな感じ。

2-3.c
#include <stdio.h>

int main(void)
{
    int score[100];
    int score_count;
    int temp_score;
    int index;

    /* 配列に値を入力する */
    score_count = 0;
    while (1) {
        scanf("%d", &temp_score);
        if (temp_score == -1) {
            break;
        }
        score[score_count] = temp_score;
        score_count++;
    }

    /* 配列の内容を表示する */
    index = 0;
    while (index < score_count) {
        printf("score[%d]: %d\n", index, score[index]);
        index++;
    }

    return 0;
}

で、ほとんどこれ本にあるままぴったり書いているのだけど、なぜか思うように動かない……。

f:id:note103:20160519013325g:plain

というところで、しばらくエディタと本とを行ったり来たり、交互に見返して、ん〜……どこも間違ってないように見えるが……と思いながら数字を入れてみると、

f:id:note103:20160519013705g:plain

ああ、できてる。

ようするに、最後に「-1」を入れたら終端の印、という仕様で書いているコードだとはわかっていたんだけど、そもそもこれは整数を受け取る前提で書かれていた、ということを完全に忘れていたんですね〜……。
だから普通に文字列で「test」とか入れても動いてくれなかった、という。

ちなみに、上記DEMOで「2-3.c」というファイル名が出てくるのは、同書のサンプルコードに付けられた番号です。
これは第2章の3つめのサンプルコードなので、「2-3」。

これがこのまま第6章の「6-3」まで行くとひとまず1冊終わりです。
(1章あたりのサンプルコードの数はまちまち。第2章だと7個ある)

今日は「2-3」と「2-4」を写した&実行したので、次の機会でとりあえず第2章のぶんを終わらせたい……。