2

このコードを見ました。私はCがまったく新しいので、ご容赦ください。

以下のwhileループはループを続けif i < SIZE && scanf("%f",&Arr[i]) == 1ます。

私はそのi < SIZE部分を手に入れましたが、どういうscanf("%f",&Arr[i]) == 1意味ですか?scanf()から値を取り込んで配列に割り当てていることはわかっていますArr。しかし、その== 1意味は何ですか?

ありがとう :)

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

4 に答える 4

2

scanf()行われた割り当ての数を返します。これ1は行われると予想されるため、scanf()戻り値が正常に値を割り当てられている場合1&Arr[i]リンクされたリファレンスページから、戻り値は次のように記述されます。

正常に割り当てられた受信引数の数、または最初の受信引数が割り当てられる前に読み取りエラーが発生した場合はEOF

于 2012-10-25T13:01:48.040 に答える
2

演算子の優先順位を覚えておくために、ここにさらにいくつかの括弧があると、おそらくより明確になります。

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」を入力すると、floatスペシャリストに入ることができないため、ループが中断され、scanf()0が返されます。

于 2012-10-25T13:17:01.743 に答える
1

の戻り値scanfは、正常に入力された引数リストの項目の数です。

引数が1つあるため、の戻り値は1呼び出しが成功したことを意味します。入力が浮動小数点数として解釈できなかった場合は、0代わりにの戻り値を取得します。

于 2012-10-25T13:01:29.883 に答える
1

scanf正常に読み取られた要素の数を返します。

マニュアルページから:

...関数は、正常に一致および割り当てられた入力項目の数を返します。これは、提供された数より少ない場合もあれば、早期の一致が失敗した場合はゼロになる場合もあります。

したがって、単一のfloat値に対して入力が成功した場合、scanf()は戻り1、条件の2番目の部分のwhileループで条件がtrueになります。

于 2012-10-25T13:03:33.000 に答える