此函数的输入是 s[]
- 字符数组和 lim
- 此数组的最大可能长度。
函数本身用于确定在控制台中输入的输入字符数组的长度。
问题是,for
循环中c != '\n'
条件的主要思想是什么?
我猜它是用来打破循环的。这很清楚。但是如果我不在输入中输入 \n
,我就无法理解它是如何实现的。
\0
这样的数组末尾是终止符吗?
如果是这样,我们为什么要在那之后使用 if (c == '\n')
条件?
代码:
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;
}
最佳答案
当你按下 Enter 时,一个 \n
换行符被添加到输入缓冲区,stdin
,这意味着这是最后一个字符在输入缓冲区中。
所以它只适合循环继续,直到 getchar()
检索到最后一个字符。
循环控制指出 c
必须是:
- 不同于
\n
。 - 不同于
EOF
。 - 并且迭代器
i
必须小于lim - 1
。
如果这些条件之一不满足循环中断,那么 c
可能不等于 \n
。
之后,如果c
等于\n
,则加入s
,条件if (c == '\n')
在那里是因为,如前所述,c
可能不等于 \n
,在那种情况下它不应该是添加到 s
。
最后,s
必须以空值终止(s[i] = '\0'
),这样它才能被正确解释为一个字符串,也就是一个以空值终止的字符数组. \n
不是空终止符,\0
是。
添加 \n
的事实只是因为实现者希望它如此,它是实现的一部分,不一定非要如此,但确实如此。
它在某些情况下很有用,例如 fgets
库函数有类似的实现,它将 \n
添加到包含缓冲区,然后 null 终止它。
关于c - c != '\n'条件在 "for"循环中的作用是什么(C语言)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62324059/