fetus Diary

2007/10/13(土) - 多分こんな感じだろう

[fetus@CHIHAYA ~]$ cat sample.cpp
#include <cstdio>

namespace resource {
    const char * const OUTPUT_FORMAT            = "Celsius = %4d     Fahrenheit = %4d %s\n";
    const char * const OUTPUT_EXT_NOTHING       = "";
    const char * const OUTPUT_EXT_WATER_BOILING = "水の沸点";
    const char * const OUTPUT_EXT_WATER_MELTING = "水の凝固点";
}

int celsius2fahrenheit(int celsius);
const char * get_ext_information(int celsius);

int main() {
    for(int celsius = -20; celsius <= 120; celsius += 10) {
        printf(resource::OUTPUT_FORMAT,
                    celsius,
                    celsius2fahrenheit(celsius),
                    get_ext_information(celsius));
    }
    return 0;
}

int celsius2fahrenheit(int celsius) {
    return 32 + celsius * 9 / 5;
}

const char * get_ext_information(int celsius) {
    switch(celsius) {
    case 0:     return resource::OUTPUT_EXT_WATER_MELTING;
    case 100:   return resource::OUTPUT_EXT_WATER_BOILING;
    }
    return resource::OUTPUT_EXT_NOTHING;
}
[fetus@CHIHAYA ~]$ g++ sample.cpp
[fetus@CHIHAYA ~]$ ./a.out
Celsius =  -20     Fahrenheit =   -4
Celsius =  -10     Fahrenheit =   14
Celsius =    0     Fahrenheit =   32 水の凝固点
Celsius =   10     Fahrenheit =   50
Celsius =   20     Fahrenheit =   68
Celsius =   30     Fahrenheit =   86
Celsius =   40     Fahrenheit =  104
Celsius =   50     Fahrenheit =  122
Celsius =   60     Fahrenheit =  140
Celsius =   70     Fahrenheit =  158
Celsius =   80     Fahrenheit =  176
Celsius =   90     Fahrenheit =  194
Celsius =  100     Fahrenheit =  212 水の沸点
Celsius =  110     Fahrenheit =  230
Celsius =  120     Fahrenheit =  248

C で書かなかったのは特に意味は無い。ほぼそのまま C に持っていけるし、これ。

get_ext_information 関数の戻り値を std::string にするか悩んだんだけども、まいっか的に const char *。動的に生成するならこんな方法は使えないので std::string あたりで。

# 「これローカルポインタ返してないか? 大丈夫か? 開放しなきゃいけないのか?」と一瞬考えさせる時点でよろしくない設計。

コメント

コメントはありません。

名前
メール
コメント

※HTML タグは使えません。HTTP URL には自動リンクが張られます。

Captcha
画像から読み取れる文字を入力: