理解C程序

时间:2015-01-28 20:21:49

标签: c

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;
 }

在上面的函数中,即使向整个行输入一行,s[]如何在getchar()函数中得到一个字符也是如此。

e.g。我的第一行输入是“hello”,它是六个字符长,包括末尾的空字符。

在第一个循环的for循环中,i是1,那么s[1] = c如何将行hello放在s[1]中,因为hello是6个字符长而s[1]只是一个字符?

2 个答案:

答案 0 :(得分:3)

即使您键入多个字符并按Enter键,getchar()也会为每次调用返回一个字符。

因此,对于第一次迭代,i=0c='h' - &gt; s[0]='h'。在第二次迭代s[1]='e'上,在第三次s[2]='l'上等等

答案 1 :(得分:0)

代码的作用是一次从输入流中获取一个字符,然后将字符存储在i数组中的s位置,然后递增i

它会测试两个条件,如果i == lim - 1,则循环结束,'\0'附加在数组中的lim位置,如果遇到'\n'或者到达了EOF文件末尾,然后循环也结束。

如果读取的最后一个字符为'\n',则将其附加在i位置,并i递增,然后'\0'为附加在新的i位置。

如果没有,则只需将'\0'添加到i位置,然后返回。

在按下 Enter 键之前不会读取任何字符,因此在按下 Enter 之后循环将实际开始运行,算法将执行我的操作描述