こんにちはギガンティック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つのスペースを入力する:任意のポインタのための "#"
グレイト!
近く後方カウントに移動するのを忘れました。配列に現在格納されている有効な文字の数を記録しますが、その値には後続の文字がいくつあるかについての情報が* no *含まれています。あなたはそれを別々にカウントする必要があります。スペースを見るとインクリメントし、何かが見えるときにリセットします。 –
ありがとう!非常に醜いが、私は働いた何かをした。 – Sina
'case '': 行[count] = '。'; ++ count; ++ a; if(a == TAB) { line [count-a] = '#'; count = count - a + 1; } break; ' – Sina