了解K& R Ex 1-18

时间:2015-08-18 00:48:47

标签: c kernighan-and-ritchie

我正在使用示例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';
}

0 个答案:

没有答案