【发布时间】:2016-10-17 22:56:50
【问题描述】:
问题空间:
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] = '\0';
return l;
}
int main()
{
int len;
char line[MAXLEN];
while ((len = _getline(line, MAXLEN)) > 0)
;
return 0;
}
【问题讨论】:
-
可能是因为
c != '\n'在for loop里面,不然for loop会在内部继续执行,直到c != '\n'不满足,这时程序会转到下一行?跨度> -
为什么自定义的
getline会在达到max后继续读取字符? -
在文件级别,以下划线开头的名称保留用于实现。应用程序代码不得使用它们。
-
顺便说一下——键盘输入是缓冲的。在您按 Enter 之前,操作系统根本不会向您的程序发送任何内容。我不确定您期望会发生什么,但您的代码会按照我的预期运行。
-
@JohnColeman 抱歉,我忘记检查了,但是代码应该按原样工作,我只是想知道为什么
printf()不调用它,而while ((len = _getline(line, MAXLEN)) > 0)正在调用它。
标签: c arrays c-strings getchar