c - 在k&r book练习1.18中,编写一个程序来删除输入的每一行中的尾随空白和制表符,并删除整个空白行

原文 标签 c arrays

#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函数为i递增'\n'(返回的长度),而不为终止的'\0'递增。

因此,在i = len - 2;中,您应该减去一个,而不是两个...对吗?为了澄清起见,我建议您尝试i = len - 1;

关于c - 在k&r book练习1.18中,编写一个程序来删除输入的每一行中的尾随空白和制表符,并删除整个空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31541235/

相关文章:

c - 评估以下表达式

android - 如何获取JSONArray的第一个值?

c++ - 在C或C++中解析具有可变条目数的行(无提升)

c - 试图计算年龄在C

c - 这个 Bison 语法有什么问题?

c - 为什么这些构造使用前后递增的未定义行为?

ruby-on-rails - 对数组的列类型使用update_attributes

c - 从文件读取到C中的数组

javascript - 可能.push()到动态命名的键?

c++ - 为什么成员函数中的char数组类型的类成员突然变成const char数组类型?