アカウント名:
パスワード:
未対応の元号を入れたら西暦 0 年扱いになったってことは、if (gengo == "大化") {...} else if (gengo == "平成") {...} else { seireki = 0;}という実装だったってことよね? これは例外吐いてエラー停止すべき状況なのでは。
> if (gengo == "大化") {吹いた。モデ権がない、ちょっと悔しいので AC
想定してる言語がCだったら大笑いだけど
> 想定してる言語がCだったら大笑いだけど
C言語でもちゃんと動きますよ
int gengo2seireki(const char * gengo){ int seireki; if (gengo == "大化") { seireki= 645; } else if (gengo == "平成") { seireki= 1989; } else { seireki = 0; } return seireki;}
const char *seireki2gengo(int seireki){ const char *ptr = NULL; for (ptr = メモリ空間の先頭アドレス; ptr !=メモリ空間の末尾アドレス; ++ptr) { if ( seireki == gengo2seireki(ptr) ) break; } return ptr;}
これでconst char *taika = seireki2gengo(645);const char *heisei = seireki2gengo(1989);とすると "大化" と "平成"のポインタが取れるので,gengo2seireki(taika)) は 645gengo2seireki(heisei) は 1989gengo2seireki("大化") と gengo2seireki("平成") は 0という"意図した通り"の動作になります.
元のコードでも動きますが,
const char *seireki2gengo(int seireki){ const char *ptr; for (ptr = メモリ空間の先頭アドレス; ptr !=メモリ空間の末尾アドレス; ++ptr) { if ( seireki == gengo2seireki(ptr) ) return ptr; } return NULL;}
の方が良いですね.
> for (ptr = メモリ空間の先頭アドレス; ptr !=メモリ空間の末尾アドレス; ++ptr) {
ここで鼻から悪魔。
> gengo2seireki("大化") と gengo2seireki("平成") は 0
コンパイラーによっては同じ文字列リテラルを1つのアドレスにまとめるものがあるのでゼロになるとは限らない
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生の大半の問題はスルー力で解決する -- スルー力研究専門家
対応時期の問題ではなく設計の問題では (スコア:5, おもしろおかしい)
未対応の元号を入れたら西暦 0 年扱いになったってことは、
if (gengo == "大化") {
...
} else if (gengo == "平成") {
...
} else {
seireki = 0;
}
という実装だったってことよね? これは例外吐いてエラー停止すべき状況なのでは。
Re: (スコア:0)
> if (gengo == "大化") {
吹いた。
モデ権がない、ちょっと悔しいので AC
Re:対応時期の問題ではなく設計の問題では (スコア:1)
想定してる言語がCだったら大笑いだけど
Re:対応時期の問題ではなく設計の問題では (スコア:1)
> 想定してる言語がCだったら大笑いだけど
C言語でもちゃんと動きますよ
int gengo2seireki(const char * gengo)
{
int seireki;
if (gengo == "大化") {
seireki= 645;
} else if (gengo == "平成") {
seireki= 1989;
} else {
seireki = 0;
}
return seireki;
}
const char *seireki2gengo(int seireki)
{
const char *ptr = NULL;
for (ptr = メモリ空間の先頭アドレス; ptr !=メモリ空間の末尾アドレス; ++ptr) {
if ( seireki == gengo2seireki(ptr) )
break;
}
return ptr;
}
これで
const char *taika = seireki2gengo(645);
const char *heisei = seireki2gengo(1989);
とすると "大化" と "平成"のポインタが取れるので,
gengo2seireki(taika)) は 645
gengo2seireki(heisei) は 1989
gengo2seireki("大化") と gengo2seireki("平成") は 0
という"意図した通り"の動作になります.
Re:対応時期の問題ではなく設計の問題では (スコア:1)
元のコードでも動きますが,
const char *seireki2gengo(int seireki)
{
const char *ptr;
for (ptr = メモリ空間の先頭アドレス; ptr !=メモリ空間の末尾アドレス; ++ptr) {
if ( seireki == gengo2seireki(ptr) )
return ptr;
}
return NULL;
}
の方が良いですね.
Re: (スコア:0)
> for (ptr = メモリ空間の先頭アドレス; ptr !=メモリ空間の末尾アドレス; ++ptr) {
ここで鼻から悪魔。
> gengo2seireki("大化") と gengo2seireki("平成") は 0
コンパイラーによっては同じ文字列リテラルを1つのアドレスにまとめるものがあるのでゼロになるとは限らない