c - 在 k&r 书练习 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 函数会为 '\n' 递增 i(返回的长度),但不会为终止 ' 递增\0'.

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

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

相关文章:

javascript - 为什么 console.log 函数返回 undefined?

javascript - IE8 array filter() 不起作用

c - 删除 C 字符串的第一部分

c - 使用 Polyspace 处理硬件

php - 在数据库中添加2组数组

c - 如何在C中的套接字上发送彩色消息?

C TCP/IP 服务器绑定(bind)错误 -- 非套接字上的套接字操作

javascript - 设置二维数组(网格)中第一个数组的第一个元素设置每个内部数组中的第一个元素

c - 如何在 x86 上使用 gcc 强制执行内存排序

c - md5sum 从套接字接收文件时失败