2

我看到了这段代码。我在C方面很新,所以请原谅我。

下面的while循环将继续循环if i < SIZE && scanf("%f",&Arr[i]) == 1

我明白了,i < SIZE但这是什么scanf("%f",&Arr[i]) == 1意思?我知道它正在从中获取值scanf()并将其分配给 array Arr。但是这== 1意味着什么?

谢谢 :)

int readValue(float Arr[]) {
    int i = 0 ;
    while (i < SIZE && scanf("%f",&Arr[i]) == 1) 
        i++ ;  
    return i ;
}
4

4 回答 4

2

如果这里有更多括号来帮助记住Operator Precedence ,可能会更清楚:

while (i < SIZE && scanf("%f",&Arr[i]) == 1)

是相同的

while ((i < SIZE) && (scanf("%f", &Arr[i]) == 1))

所以如果i碰巧>= SIZE==无关紧要的,因为它根本不会被执行。如果i小于SIZEscanf()将被调用并返回参数列表中成功填充的项目数。因此,在您的情况下,如果这是 1 (如果我们得到一个浮点数并将其放入Arr[i]),那么条件就满足了。

因此,您将循环直到i大于或等于SIZE或输入无效条目scanf()

例如,如果您输入字母“h”,您的循环将中断,因为它不能进入​​特定的浮点数,因此scanf()将返回 0。

于 2012-10-25T13:17:01.743 回答
2

scanf()返回进行的分配数,在这种1情况下,如果scanf()返回1&Arr[i]则已成功分配值。从链接的参考页面中,返回值描述为:

成功分配的接收参数数,如果在分配第一个接收参数之前发生读取失败,则为 EOF

于 2012-10-25T13:01:48.040 回答
1

scanf返回成功读取的元素数:

从手册页:

...函数返回成功匹配和分配的输入项的数量,该数量可能少于提供的数量,或者在早期匹配失败的情况下甚至为零。

因此,如果单个浮点值的输入成功,scanf()将返回1并且条件将在条件的第二部分的 while 循环中为真。

于 2012-10-25T13:03:33.000 回答
1

的返回值scanf是成功填充的参数列表的项目数。

由于只有一个参数,返回值1表示调用成功。如果输入不能被解释为浮点数,你会得到一个返回值0

于 2012-10-25T13:01:29.883 回答