ページ 1 / 1
EOF
Posted: 2009年5月19日(火) 10:02
by 研修生
int main()
{
int c, lastc = EOF;
while((c = getchar()) != EOF){
if(c != ' '){
putchar(c);
}
else if(lastc != ' '){
putchar(c);
}
lastc = c;
}
return 0;
}
このプログラムは以前質問した2個以上の空白を1つにするというプログラムの解答サンプルですが
判らない所はlastcの初期値のことです。初期値が空白で文字列が○aaのように最初に空白があった場合
その空白は表示されません。また今回は空白が2個以上あった場合 ですが文字列が2個以上あった場合
の一般的な初期値は何にするのが妥当か?という論議がありました。
私としてはも対象の文字以外ならなんでもいいんじゃ・・という意見もだしましたが一般的ではないと
退けられました。結局答えは EOF だったのですが、whileの条件があるからそうかなと思っていましたが
それでもないようです。何故初期値に EOFが良いのか理由わかる方いますか?
Re:EOF
Posted: 2009年5月19日(火) 11:45
by 研修生
自己解決しました
Re:EOF
Posted: 2009年5月19日(火) 11:52
by GPGA
参考までに聞きたいのですが、どのように自己解決しました?
私個人としては、このプログラムはlastcの初期値が' 'のときに正常に動かなくなるので
' '以外であるならば何でもよいと考えます。
従って、初期化は
int lastc = !' ';
とします。
Re:EOF
Posted: 2009年5月19日(火) 13:24
by 研修生
私もそんなもの臨機応変にかえれば・・と思うんですけどね。
今回の論題は空白ではなく文字列であったら?というものでした。
もし2個以上の文字'a'を1つにするとき初期値を'a'とするのはNGです。同様にa~zまで言えます。
すると一般的に定義するのはどれが適当か という論題でした。
結論はEOFが最も適した値でその理由はEOFは0~255以外の値であるから
ということでした。
Re:EOF
Posted: 2009年5月19日(火) 14:47
by たかぎ
> 私もそんなもの臨機応変にかえれば・・と思うんですけどね。
具体的にどんな値にするかはともかく、同様のケースでは常に同じようにコーディングするという一貫性は大切です。
Re:EOF
Posted: 2009年5月19日(火) 17:19
by non
>結論はEOFが最も適した値でその理由はEOFは0~255以外の値であるから
ということでした。
0ではいけないのでしょうか?
私なら lastc = '\0' と書くかもしれない
Re:EOF
Posted: 2009年5月20日(水) 14:52
by GPGA
回答、ありがとうございました。