c != '' 条件在 "for" 循环(C 语言)中的作用是什么?



此函数的输入s[]- char 数组和lim- 此数组的最大可能长度。

该函数本身用于确定在控制台中输入的输入字符数组的长度。

问题是,循环中c != 'n'条件的主要思想是什么for

我想它是用来打破循环的。很清楚。但是如果我不在输入中键入n,我无法了解如何实现它。

那是像这样的数组末尾的终结符吗?

如果是这样的话,我们为什么要在那之后使用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] = '';
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] = ''(,这样它才能被正确地解释为一个字符串,也就是一个以空结尾的字符数组。n不是空终止符,是。

添加n的事实只是因为实现者希望它如此,它是实现的一部分,它不必如此,但它确实如此。 它在某些情况下可能很有用,例如fgets库函数具有类似的实现,它将n添加到包含缓冲区,然后 null 终止它。

好吧,你想得到一条线。终止字符串,但一个字符串可以存在多行。因为函数的名称表明您只需要一行。行以n终止,之后开始新行。

条件

c != 'n'

如果遇到与换行符不同的字符,则评估为true

如您所知,由于它是一个getline()实现,因此停止从输入字符串读取是一个很好的理由。

请注意,在此检查结束后,如何执行循环s[i] = '';,以便在之前新行字符所在的位置之后的一个位置终止字符串。


那么,getline()是如何工作的呢?

该函数的核心是 for 循环

for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='n'; ++i)

条件i < lim-1 && (c=getchar())!=EOF && c!='n'的意思是:">分配给c一个字符得到'getchar((直到...">

  • 读取字符为 EOF
  • 读取字符为n(换行符(
  • 已读取调用方请求的字符数 (lim(

因为'n'这只是条件之一—— 它也可以是作者不想保存的EOF,也可以达到字符数限制,我们不想将NUL终止符写出char数组边界

NUL 终止与任何这些条件无关,它总是发生

如果字符读c是返回新行n,则for循环将停止,数组将以n结尾,后跟

这就是函数应该做的,它被称为getline(),行以n结尾。

逻辑很简单:

for循环中,我们说当用户点击Enter时,停止读取;所以它停止并且不会读取其余的输入。 因为条件c!='n'变得假。

在if语句中,我们告诉程序继续读取;所以"如果"用户点击Enter,程序将从中断的地方开始读取其余的输入,并将再次开始循环。

if 语句是为了防止循环停止,也是告诉程序输入中有单独行的一种方式。

最新更新