嗨,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;