空白

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

空白

#1

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

#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:空白

#2

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

原因わかりましたのでかんがえみます。

Mist

Re:空白

#3

投稿記事 by Mist » 16年前

> 原因と対策を教えて下さい。

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

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

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

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

閉鎖

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