Почему в цикле while после сканирования есть a -1?

#c

#c

Вопрос:

Я не знаю, почему после scanf() есть a> -1!

 while(scanf("%f %f %f %f", amp;x1,amp;x2,amp;y1,amp;y2)>-1 amp;amp; (x1!=0 amp;amp; x2!=0 amp;amp; y1!=0 amp;amp; y2!=0) )
{
   x=x1/x2;
   y=y1/y2;
  

Комментарии:

1. Пожалуйста, прочитайте о том, что scanf возвращает .

2. Проверяется, является ли возвращаемое значение scanf неотрицательным.

3. Примечание: этот код кажется сомнительным. Правильный код проверил бы полный успех == 4 , а не частичный успех >-1 .

4. @user694733 Это не побочное примечание. Вы просто скромничаете, на самом деле это одна из важнейших частей.

5. @Someprogrammerdude возможно, они были инициализированы перед циклом. мы не знаем и не представляем, что происходит в цикле перед следующим scanf

Ответ №1:

В случае успеха scanf возвращает количество успешно назначенных аргументов. Если ошибка в СОПОСТАВЛЕНИИ происходит до назначения первого аргумента, scanf возвращает 0, а если ошибка ввода происходит до назначения первого аргумента, возвращается EOF. А теперь ответ на ваш вопрос: EOF расширяется до -1, поэтому ваше значение while примерно такое while(«ошибка ввода в scanf отсутствует()» amp;amp;….).