Я приступаю к упражнению 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 и нажимаю ввод, она автоматически печатает ее.Должен ли я создавать массив строк, а затем перебирать и печатать их, когда закончите?