Пока l oop внутри if-оператора с таким же условием внутри? - PullRequest
2 голосов
/ 13 января 2020

Один очень опытный программист написал что-то вроде этого:

#include <string>
using namespace std;

class Fraction
{
 float nominator;
 float denominator;

void load()
{
 cin>>nominator; cin>>denominator;
 if(denominator==0)
        {
          while(denominator==0)
          { 
            cout<<"denominator can not be equal 0!"<<endl;
            cin>>denominator;
          }
        }
}
};

Я понятия не имею, почему существует оператор if. Это действительно необходимо?

Ответы [ 3 ]

4 голосов
/ 13 января 2020

В этом конкретном примере

while(denominator==0)
{ 
  cout<<"denominator can not be equal 0!"<<endl;
  cin>>denominator;
}

будет в точности эквивалентным.

В предоставленном вами контексте ничто не может сказать нам, почему кто-то вложит этот l oop в бесполезный if, но можно придумать объяснения. В более ранней версии этого кода внутри блока if могло быть что-то, что могло изменить поведение программы / функции.

Это также может быть невинной ошибкой.

Кошка Страуструпа возможно, ходил по их клавиатуре.

0 голосов
/ 13 января 2020

Из этого кода:

 if(denominator==0)
    {
      while(denominator==0)
      { 
        cout<<"denominator can not be equal 0!"<<endl;
        cin>>denominator;
      }
    }

Я думаю, if используется только в учебных целях, чтобы просто показать, как поток будет go до while после проверки , если состояние. И как while loop будет работать дальше.

Но , если здесь на самом деле не требуется. Этот код делает то же самое:

while(denominator==0)
{ 
  cout<<"denominator can not be equal 0!"<<endl;
  cin>>denominator;
}
0 голосов
/ 13 января 2020

Действительно ли это необходимо?

Нет, в этом нет необходимости.

Показанный фрагмент кода эквивалентен программе, в которой оператор if заменен содержащимся в нем оператором. l oop заявление.

...