下面是C答案书中提到的练习1-18的解决方案,练习要求以下内容:编写程序以从每行输入中删除尾随空白和制表符,并删除完全空行。
我正试图在cygwin for windows上测试它,如下所示:
./ex1_18.exe <text.txt >t.txt
但结果文件(t.txt)是原始文件(text.txt)的典型副本,具有相同的尾随空格和制表符。 有什么问题?
提前致谢。
这是C答案书的解决方案(对函数名称进行了一些更改):
#include <stdio.h>
#define MAXLINE 1000
int getln(char Line[], int maxline);
int remov(char s[]);
main()
{
char line[MAXLINE];
while(getln(line, MAXLINE)>0)
if(remov(line)>0)
printf("%s", line);
return 0;
}
int remov(char s[])
{
int i;
i=0;
while(s[i]!='\n')
++i;
--i;
while(i>=0 && (s[i]==' ' || s[i] == '\t'))
--i;
if(i>=0){
++i;
s[i]='\n';
++i;
s[i]='\0';
}
return i;
}
int getln(char s[], int lim)
{
int c, i, j;
j=0;
for(i=0; (c=getchar()) != EOF && c!= '\n'; ++i)
if(i< lim -2){
s[j]=c;
++j;
}
if(c=='\n'){
s[j]=c;
++j;
++i;
}
s[j]='\0';
return i;
}