这是来自 Kernighan & Ritchie 的“The C Programming Language”的示例:
int getline(char s[], int lim)
{
int c, i = 0;
while (--lim > 0; && (c=getchar()) !=EOF && c !='\n')
{
s[i++] = c;
}
if (c =='\n')
{
s[i++] = c;
}
s[i] = '\0';
return i;
}
为什么我们应该检查 c != '\n'
,尽管在那之后我们使用了 s[i++] = c
?
最佳答案
函数从标准输入中读取字符,直到找到 EOF 或换行符。
第二个检查确保唯一的换行符被放入 char 数组。 EOF 不应出现在正确的 c 字符串中。此外,如果该字符不是换行符,则意味着我们可能已经填满了我们的 c 字符串,在这种情况下,我们不应该再向其中添加任何字符。
注意我们仍然附加了'\0'。我们确保在我们的 c 字符串中仍有空间容纳一个字符,因为我们使用前缀减量器,它在比较之前进行评估。
关于c - 为什么我们要使用额外的表达方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71913/