#include <stdio.h>
#define MAXLINE 1024
int getline(char s[], int lim);
main()
{
int i, len;
char line[MAXLINE];
while ((len = getline(line, MAXLINE)) > 0) {
i = len - 2;
while (i >= 0 && (line[i] == ' ' || line[i] == '\t'))
--i;
if (i >= 0) {
line[i+1] = '\n';
line[i+2] = '\0';
printf("%s", line);
}
}
return 0;
}
int getline(char s[],int lim)
{
int i,c;
for(i=0;i<lim-1 && (c=getchar())!=EOF && c!='\n';++i)
s[i] = c;
if( c == '\n')
{
s[i]=c;
++i;
}
s[i]='\0';
return i;
}
这是我的程序,我很累,但它似乎显示相同的输入,没有任何更改。我无法理解我犯了什么错误...... 提前致谢。
最佳答案
您的 getline
函数会为 '\n'
递增 i
(返回的长度),但不会为终止 ' 递增\0'
.
因此,在 i = len - 2;
中,您应该减去一,而不是二......对吗?为了澄清这一点,我建议您尝试i = len - 1;
!
关于c - 在 k&r 书练习 1.18 中编写一个程序来删除每行输入中的尾随空白和制表符,并删除整个空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541235/