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]
只是一个字符?
答案 0 :(得分:3)
即使您键入多个字符并按Enter键,getchar()也会为每次调用返回一个字符。
因此,对于第一次迭代,i=0
和c='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 之后循环将实际开始运行,算法将执行我的操作描述