我正在使用示例1-18,该程序用于从每行输入中删除尾随空白和制表符,以及删除完全空行。
第一个问题 - 当输入粘贴时,为什么程序显示第一行然后等待我按回车继续?
第二个问题 - 我期待输入
test\n
\n
\n
test\n
输出(实际未打印的新行)
test\n
test\n
相反,我得到以下
test
testtest
test
前两个测试是粘贴输入,第二个测试是输出。我哪里弄错了?此外,第四次测试不会显示,直到输入被按下。
#include <stdio.h>
#define MAXLINE 1000 //maximum input line size
int get_line(char line[], int maxline);
void replacewhite(char line[], int length);
main() {
int len;
char line[MAXLINE];
while ((len = get_line(line, MAXLINE)) > 0) { // create lines < 1000 characters
replacewhite(line, len); // replace excess whitespace at end of line
// if len = 1, the line only has '\n', do nothing and get next line
if(len > 1) {
printf("%s\n", line);
}
}
return 0;
}
int get_line(char s[], int lim) {
int c, i;
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;
}
// set index to end of line, move backwards to first printed character,
// add null terminator one position afterwards (new lines handled in printf)
void replacewhite(char s[], int length){
int i;
i = length;
while(s[i] <= ' '){
--i;
}
s[i+1] = '\0';
}