gpt4 book ai didi

c - 我对 KandR C ex1-21 entab 的尝试需要帮助

转载 作者:行者123 更新时间:2023-11-30 16:55:37 24 4
gpt4 key购买 nike

这里是巨型 C 新生儿,您好

我正在尝试解决 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;

关于c - 我对 KandR C ex1-21 entab 的尝试需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com