求详细解释说明

autorun2010 2010-05-04 03:35:08
[code=C/C++]
int getline(char s[], int lim)
{
int c, i;
i = 0;
while(--lim > 0 && (c=getchar()) != EOF && c != '\n')
s[i++] = c;
if(c == '\n')
s[i++] = c; //这里判断输入的字符要是回车符 怎么把字符赋给字符串了呢又?
s[i] = '\0'; //这里把是s[i] = '\0' 到底是指什么意思呢?
return i;
}
[code]

标注的地方是我不懂的,请高手给予解答,谢谢!
...全文
75 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
autorun2010 2010-05-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 huanmie_09 的回复:]

这是c语言程序设计_现代方法里的一个例子吧.
看循环条件
--lim > 0 && (c=getchar()) != EOF && c != '\n'

当lim=3时,
输入为abcdef回车.
然后跟踪,
第一次循环后, lim=2, s[0]='a';
第二次循环后, lim=1, s[0]='b';
由于是先自减,第三次循环时--lim……
[/Quote]


谢谢,非常感谢,完全理解了,加分!太感谢了
huanmie_09 2010-05-04
  • 打赏
  • 举报
回复
修正一下:
第二次循环后, lim=1, s[0]='b';
-->
第二次循环后, lim=1, s[1]='b';
huanmie_09 2010-05-04
  • 打赏
  • 举报
回复
这是c语言程序设计_现代方法里的一个例子吧.
看循环条件
--lim > 0 && (c=getchar()) != EOF && c != '\n'

当lim=3时,
输入为abcdef回车.
然后跟踪,
第一次循环后, lim=2, s[0]='a';
第二次循环后, lim=1, s[0]='b';
由于是先自减,第三次循环时--lim=0,条件不成立.循环退出.
由于&&运算符的短路运算特性, c=getchar()将不执行. 此时c依旧等于上一次循环读取的'b'.
判断if(c=='\n') 不成立.
最后写入结束符. s[2]='\0'.

当lim=3时,
输入为a回车.
然后跟踪,
第一次循环后, lim=2, s[0]='a';
第二循环,lim=1, c='\n', 条件不成立.循环退出.
判断if(c=='\n') 成立.
s[1]='\n';
最后写入结束符. s[2]='\0'.

spygg 2010-05-04
  • 打赏
  • 举报
回复
int getline(char s[], int lim)
{
int c, i;
i = 0;
while(--lim > 0 && (c=getchar()) != EOF && c != '\n')
s[i++] = c;
if(c == '\n')
s[i++] = c; //这句不是很懂,貌似是读取最后一个回车键,while循环中没赋值给s数组
s[i] = '\0'; //字符串结尾都要加上'\0'
return i;
}//高手斧正哈
huanmie_09 2010-05-04
  • 打赏
  • 举报
回复
如果输入的字符串长度s小于lim, 那么回车符会保存到s中.
最后写入字符串结束符'\0'.

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧