嗨,Gigantic C Newborn在这里

我正在尝试解决KandR C编程中的entab问题,但遇到了一个非常愚蠢的问题。
为了解决这个问题,我计算了所有空格达到8的倍数的情况,如果是,我有一个循环,应该向后退并删除前面的七个空格,然后将第零个空格设为'#'代表标签。如果空格不超过8,则空格应以'。'表示。如果按Tab键,则用户还将获得一个“#”。
我的问题是,当我数到8时,空格不会被删除,如果我数到9,我会得到一个'。#'。

请您告诉我我的新手代码有什么问题吗?

#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个空格时:
        “#”

感谢任何指针!

最佳答案

您忘了将计数向后移动

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

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

07-28 02:56
查看更多