2012-05-13 7 views
1

私はそれは入力が、私は信じて1から異なるだろういつでも停止することとしているように見える1.入力1に対して次の機能が停止しないのはなぜですか?

int main(void) { 

double sum,v; 

while (scanf("%lf",&v)==1) { 
    printf("\t%.2f\n", sum += v); 

} 

以外の番号を入力するときに、この機能が停止しない理由を私は理解してあなたの助けが欲しいですそれはそれが条件と関係していること、それは私が思うより前に何かをチェックするかもしれない。

+0

'C'ライブラリ関数がどのように動作しているかわからないときは、インターネット上のドキュメントがあります。 [ここに例があります](http://pubs.opengroup.org/onlinepubs/007904975/functions/scanf.html)。あなたの 'sum'変数は初期化されていないので、ランダムなガベージ値を含むかもしれないことに注意してください。 – Blastfurnace

+0

ありがとうございます@Blastfurnace – Numerator

答えて

4

関数scanfは、読み取った実際の値ではなく、一致して入力された項目の数を返します。

これらの関数は、正常に完了した入力項目を の数だけ返します。初期一致が失敗した場合は、この番号はゼロ になる可能性があります。 の入力が最初に一致する失敗または変換の前に終了する場合は、EOFが返されます。

したがって、コードscanfは、正常に読み取るために1を返します。代わりにvをテストする必要があります(但し、==では使用できません)。

+0

「一致して満たされたアイテムの数」とは何ですか?彼女が入力したアイテムの数は? – Numerator

+0

あなたは、==についてのあなたのコメントのための推論を拡張するかもしれません。彼は問題を認識していない可能性があります。 – EvilTeach

+0

@EvilTeachあなたは正しいですが、私はそれが答えの範囲外だと思います。 – cnicutar

0

成功した場合、正常に読み取られた項目の数を返します。したがって、さらにv == 1を確認する必要があります。

関連する問題