自定义 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指定的。
问题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指定的。