ページ 11

空白

Posted: 2009年5月25日(月) 09:47
by 研修生
#define TABSTOP 4
int main(int argc, char* argv[/url])
{
  int c, nb, nt, pos;
  nb = 0;
  nt = 0;

  for(pos = 1;(c = getchar()) != EOF; ++pos){
    if(c == ' '){
       if((pos % TABSTOP) != 0){
          nb++;
       }
     
       else{
          nb = 0;
          nt++;
       }
    }
  
    else{
       for(; nt > 0; --nt){
         putchar('\t');
       }
 
       for(; nb > 0; --nb){
         putchar(' ');
       }
 
       putchar(c);
  
       if(c == '\n'){
          pos = 0;
       }
    }
  }

  return 0;
}
タブストップに関する問題なのですが、
これだと最後の行がもし空白の列で
一番最後に改行を入れない場合空白が吐き出されないのですが
何故かわかる方いますか? 原因と対策を教えて下さい。

Re:空白

Posted: 2009年5月25日(月) 09:57
by 研修生
原因わかりましたのでかんがえみます。

Re:空白

Posted: 2009年5月25日(月) 09:57
by Mist
> 原因と対策を教えて下さい。

原因:出力されるためには空白以外の文字が読み込まれてelse側を実行する必要があるから。

> 一番最後に改行を入れない場合空白が吐き出されないのですが

この場合、EOFでforが終わるから一度もelse側が実行されないからです。

対策まで書くと丸投げに回答しているようなものなのでご自分で考えてください。