1

下面的函数是返回通过键盘输入的行的长度。但它的说法是(C 编程语言 K&R)it will return the length of the line, or zero if end of file is encountered.但是当我用我的 C 基本知识进行分析时,至少它正在返回行的长度 until EOF。那么它什么时候返回0。或者我的理解是错误的。任何人都可以澄清我吗?

int getline(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;
}
4

4 回答 4

2

You analyzed the program correctly.

But when I analyzed with my basic knowledge in C at least it is returning the length of the line till EOF

-> It will return 0 when the line is empty

于 2013-06-24T11:22:04.107 回答
2

当什么都没有时, EOF 将在那里,例如在Empty line的情况下,c==EOF并且您在for循环中输入了一个条件(c=getchar())!=EOF。因此i不会改变,当它在执行后返回时return i;,它会返回0

我希望这有帮助。

于 2013-06-24T11:28:44.867 回答
0

如果该行为空,它将返回 0。

for (i=0; i < lim-1 && (c=getchar())!=EOF && c!=’\n’; ++i)

首先,您设置i=0;. 如果((c=getchar())==EOF), for 循环将不会运行并且i不会递增。当第一个字符是 a 时情况相同\n(在这种情况下 i 稍后会递增)

于 2013-06-24T11:23:56.930 回答
0

for循环中的条件之一是(c=getchar())!=EOF. 因此,当该行为空时,即。c==EOF在第一个实例本身,它不会进入循环。因此i不会增加并返回 0。

于 2013-06-24T11:24:48.273 回答