EOF

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
研修生

EOF

#1

投稿記事 by 研修生 » 16年前

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

#2

投稿記事 by 研修生 » 16年前

自己解決しました

GPGA

Re:EOF

#3

投稿記事 by GPGA » 16年前

参考までに聞きたいのですが、どのように自己解決しました?

私個人としては、このプログラムはlastcの初期値が' 'のときに正常に動かなくなるので
' '以外であるならば何でもよいと考えます。
従って、初期化は

int lastc = !' ';

とします。

研修生

Re:EOF

#4

投稿記事 by 研修生 » 16年前

私もそんなもの臨機応変にかえれば・・と思うんですけどね。
今回の論題は空白ではなく文字列であったら?というものでした。
もし2個以上の文字'a'を1つにするとき初期値を'a'とするのはNGです。同様にa~zまで言えます。
すると一般的に定義するのはどれが適当か という論題でした。
結論はEOFが最も適した値でその理由はEOFは0~255以外の値であるから
ということでした。

たかぎ

Re:EOF

#5

投稿記事 by たかぎ » 16年前

> 私もそんなもの臨機応変にかえれば・・と思うんですけどね。

具体的にどんな値にするかはともかく、同様のケースでは常に同じようにコーディングするという一貫性は大切です。

non

Re:EOF

#6

投稿記事 by non » 16年前

>結論はEOFが最も適した値でその理由はEOFは0~255以外の値であるから
ということでした。

0ではいけないのでしょうか?
私なら lastc = '\0' と書くかもしれない

GPGA

Re:EOF

#7

投稿記事 by GPGA » 16年前

回答、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る