自定义 getline() 实现 - 用于 while 循环内

Custom getline() Implementation - for inside a while loop

问题space:

while ((len = _getline(line, MAXLEN)) > 0) 是如何使 _getline(...) 内的 i 递增,但直到按下 enter key 才打印结果?

代码示例:

#include <stdio.h>
#include <string.h>

#define MAXLEN 1000

int _getline(char s[], int max)
{
    int c, i, l;

    for (i = 0, l = 0; (c = getchar()) != EOF && c != '\n'; ++i) {

        printf("%d\n", i);

        if (i < max - 1) {
            s[l++] = c;
        }
    }

    if (c == '\n' && l < max - 1)
        s[l++] = c;

    s[l] = '[=10=]';
    return l;
}

int main()
{
    int len;
    char line[MAXLEN];

    while ((len = _getline(line, MAXLEN)) > 0)
        ;

    return 0;
}

How is it ... (various stuff does not occur) but not print the result until enter key pressed?

来自 stdin 的典型输入是 行缓冲

getchar()没有可用的它等啊等,直到输入'\n' 被按下,或者缓冲区填满(可能是 4k 个字符),或者出现 EOF - 然后它 returns 与第一个字符。对 getchar() 的后续调用可能 return 使用缓冲的行输入快速。

缓冲行为取决于实现。不是C指定的。