我开始 K&R 的练习 1-18
编写一个程序来删除每行输入中的尾随空格和制表符,并删除整个空白行。
这是我到目前为止想出的
#include <stdio.h>
#define MAXLINE 1000
int getline(char line[], int maxline);
void copy(char to[], char from[]);
int main () {
int len;
char line[MAXLINE];
while (getline(line, MAXLINE) > 0) {
printf("%s", line);
}
return 0;
}
int getline(char s[], int lim) {
int c, i, lastNonBlankIndex;
lastNonBlankIndex = 0;
for (i=0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
if (c != ' ' && c != '\t') {
lastNonBlankIndex = i + 1;
}
s[i] = c;
}
if (i != lastNonBlankIndex) {
i = lastNonBlankIndex;
c = '\n';
}
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
第二部分听起来很难,因为我不确定如果该行只有空格或制表符,我应该返回什么。毕竟,如果我返回 0,它将停止getline()
调用。这是我应该设置的地方吗#define
,例如ALL_BLANKS
.
无论如何,对于实际的主要问题,这是从行中删除尾随空格和制表符的正确方法吗?我运行了一些输入,它似乎工作。但是,如果我将带有换行符的文本复制并粘贴到 CL 中,它会看起来全部串在一起。当我在 CL 中输入一行并按 Enter 时,它会自动打印出来。我应该构建一个行数组,然后在完成后循环并打印它们吗?