- ベストアンサー
プログラム問題(1)
以下の問題のプログラムをやったのですが、コマンドプロンプトで実行してみるとエラーになってしまうのですが、どなたか問題点を指摘していただけないでしょうか? 【問題】 1 西暦1868年から2007年までの年号を入力して和暦に変更して出力するプログラムを作成するプログラム。 例 入力 1868 出力 明治元年 2007 平成19年 【自分でやったプログラム】 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define streq(a, b) !strcmp((a), (b)) const char *get_era(int); const char *get_era_name(int); int get_era_year(int); void test_get_era(void); int main(int argc, char *argv[]) { int year; char *endptr; const char *era; test_get_era(); if (argc < 2) { fprintf(stderr, "引数を入力してください。\n"); exit(1); } year = (int) strtol(argv[1], &endptr, 0); if (*endptr != '\0') { fprintf(stderr, "数値を入力してください。\n"); exit(1); } era = get_era(year); if (era == NULL) { fprintf(stderr, "西暦を入力してください。(1868-2007)\n"); exit(1); } printf("%s\n", era); return 0; } const char * get_era(int year) { static char buf[256]; int era_year = get_era_year(year); const char *era_name = get_era_name(year); if (era_year == -1) { return NULL; } if (era_year == 1) { sprintf(buf, "%s%s", era_name, "元年"); } else { sprintf(buf, "%s%d%s", era_name, era_year, "年"); } return buf; } int get_era_year(int year) { if (1868 <= year && year <= 1911) { return year - 1867; } if (1912 <= year && year <= 1925) { return year - 1911; } if (1926 <= year && year <= 1988) { return year - 1925; } if (1989 <= year && year <= 2007) { return year - 1988; } return -1; } const char * get_era_name(int year) { if (1868 <= year && year <= 1911) { return "明治"; } if (1912 <= year && year <= 1925) { return "大正"; } if (1926 <= year && year <= 1988) { return "昭和"; } if (1989 <= year && year <= 2007) { return "平成"; } return NULL; } void test_get_era(void) { /* 無効 */ assert(get_era(1867) == NULL); assert(get_era(2008) == NULL); /* 明治 */ assert(streq(get_era(1868), "明治元年")); assert(streq(get_era(1869), "明治2年")); assert(streq(get_era(1911), "明治44年")); /* 大正 */ assert(streq(get_era(1912), "大正元年")); assert(streq(get_era(1913), "大正2年")); assert(streq(get_era(1925), "大正14年")); /* 昭和 */ assert(streq(get_era(1926), "昭和元年")); assert(streq(get_era(1927), "昭和2年")); assert(streq(get_era(1988), "昭和63年")); /* 平成 */ assert(streq(get_era(1989), "平成元年")); assert(streq(get_era(1990), "平成2年")); assert(streq(get_era(2007), "平成19年")); }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「コンパイラが2バイト文字(漢字)を受けつけない」んだと思います。 2バイト文字には「1」とか「A」とか、全角数字や全角英字など「全角の文字、全部」が該当するので注意が必要。 「漢字が使えるコンパイラ」を使用して、テキストエディタも「コンパイラと同じ漢字コードを扱う物」にしましょう。
補足
95:文字列または文字定数が閉じていない 96:Return文に:がない 98:文字列または文字定数が閉じていない 99:Return文に:がない と、errorがでるのですがそのとおり記述してもならないのでどこかほかの部分が間違っていると思います! よろしくお願いします!!