2016-10-25 14 views
0

こんにちはギガンティックC新生児を必要とentab KandR C ex1-21への私の試みは。 これを解決しようとすると、私は8の倍数になるとすべてのスペースを数えています。もしそうであれば、前に戻って前の7つのスペースを削除してから0番目のスペースを# 'を押してタブを表します。スペースが8までカウントされない場合、スペースは '。'で表す必要があります。タブキーを押すと、ユーザーは「#」も取得します。 私の問題は、最大8までカウントし、スペースは削除されず、9までカウントすると「。#」が得られます。私はKandR Cプログラミングにおけるentab疑問を解決しようとしていますし、私はむしろ愚かな問題に遭遇してきたここ</p> <p>を支援

私の初心者コードで何が間違っているか教えてください。

#define TAB 8 
#define SPACE 1 
#define MAXLINE 10000 

int entab(char line[], int limit); 

int main(void) 
{ 
    char aline[MAXLINE]; 
    int lenline = 0; 

    while((lenline = entab(aline, MAXLINE)) > 0) 
     ; 
    return 0; 
} 

int entab(char line[], int limit) 
{ 
    int count = 0; 
    int c, a; 
    while((c = getchar()) != EOF && c != '\n' && count < limit - 1) 
    { 
     switch(c){ 
      case ' ': 
       if(count != 0 && (count % TAB == 0)) 
       { 
        a = count; 
        while(a > (count - TAB) -1) 
        { 
         line[a] = '\0'; 
         --a; 
        } 

        line[count] = '#'; 
        ++count; 
       } 
       else 
       { 
        line[count] = '.'; 
        ++count; 
       } 
       break; 
      case '\t': 
       if (count < TAB) 
       { 
        line[count] = '#'; 
        ++count; 

       } 
       break; 
      default: 
       line[count] = c; 
       ++count; 
       break; 
     } 
    } 

    line[count] = '\0'; 

    printf("\""); 
    for(int each = 0; each < count; ++each) 
     printf("%c", line[each]); 
    printf("\""); 
    printf("\n"); 
    return count; 
} 

私の出力は、次のとおりです。 入力8つのスペース: ./ex1-21

"........" 

9つのスペースを入力する:任意のポインタのための "#"

グレイト!

+0

近く後方カウントに移動するのを忘れました。配列に現在格納されている有効な文字の数を記録しますが、その値には後続の文字がいくつあるかについての情報が* no *含まれています。あなたはそれを別々にカウントする必要があります。スペースを見るとインクリメントし、何かが見えるときにリセットします。 –

+0

ありがとう!非常に醜いが、私は働いた何かをした。 – Sina

+0

'case '': 行[count] = '。'; ++ count; ++ a; if(a == TAB) { line [count-a] = '#'; count = count - a + 1; } break; ' – Sina

答えて

0

あなたは変数 `count`のうち、あまりにも取得しようとしている

   a = count; 
       while(a > (count - TAB) -1) 
       { 
        line[a] = '\0'; 
        --a; 
       } 

       line[count] = '#'; 
       ++count; 
+0

こんにちはジョシュア私は投稿する前にそれを試みたが、それは助けにはなりませんでした。 – Sina

関連する問題