2014-10-16 3 views
0

Я преподаю себе C и работать через K & R. Я делаю упражнения 1-21:понимание entab пример кода в к & г

Написать entab Программа, которая заменяет строки заготовок минимальным числом вкладок и пробелов для достижения одинакового интервала. Используйте те же табуляции, что и для detab.

У меня возникли проблемы с этим упражнением, поэтому я нашел решение в Интернете, но я этого не понимаю. Может кто-нибудь объяснить, как работает этот код?

#include<stdio.h> 
#define TABINC 8 

int main(void) 
{ 
    int nb,nt,pos,c; 

    nb = 0; 
    nt = 0; 

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

      putchar(c); 

      if(c == '\n') 
       pos = 0; 
      else if (c == '\t') 
       pos = pos + (TABINC - (pos -1) % TABINC) - 1; 
     } 

    return 0; 
} 
+0

Я не понимаю, почему вы хотите отслеживать позицию. Похоже, что все вещи пробелы; правильно? – ChiefTwoPencils

+0

Я думал, код верный? – user1527227

+0

Что именно не работает, как вы ожидали? Вы вкладываете много слов, но не упоминаете, в чем проблема. –

ответ

0

Код для

  • положить вкладку ('\t'), когда пространство () встречается в положении, которое является кратным TABINC, то есть, размер вкладки.

  • Когда встречается вкладка, сбрасывается количество пробелов. Это предпочитает вкладку, чтобы достичь TabStop

Для иллюстрации: - пространство, показанное в * - вкладка отображается в

column: 1 2 3 4 5 6 7 8 9 10 
input : * * * * h e l * * w 
output: <tab>hel<tab>*w 

В этом примере, когда пространство встречаются в каждой позиции столбца, которая делится на TABINC, то есть 4 (в данном случае), вставлена ​​вкладка '\ t'. В противном случае.

Надеюсь, это даст вам некоторую идею.