K& R C练习1-18的测试解决方案不起作用

时间:2016-05-01 17:35:59

标签: c

下面是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;
}

0 个答案:

没有答案