Если еще заявление о отступе важно или нет?(C ++) - PullRequest
0 голосов
/ 24 мая 2018

Имеет ли отступ в операторе if else какое-либо отношение к выполнению кода или это просто что-то для чистых кодов?

пример из книги Accelerated C ++, написанной Эндрю Кенингом:

while(c != cols){
    if(r == pad + 1 && c == pad + 1){
      cout << greet;
      c+=greet.size();
    } else {

      if(r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
        cout << "*";

      else
        cout << " ";
        ++c;


    }

  }

Приращение префикса c выполняется независимо от того, r = 0 или нет, но я не понимаю, почему.

Если оператор if становится истинным, печатается звездочка.Если печатается не пустое место, и c увеличивается.Вот как я это читаю, но c увеличивается на единицу независимо от того, какие значения r или c.

Это то, что говорится в книге, но нет никакого объяснения, которое я мог бы найти:

Обратите внимание, как различные отступы ++ c;Обращает на себя внимание тот факт, что он выполняется независимо от того, находимся ли мы на границе.

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

В C ++ длина отступа не влияет на интерпретацию операторов.Иногда пробел необходим для разделения символов int a.В других случаях это не нужно a=b+c;

Оператор if определен так, что после условия if(condition) может быть только 1 оператор.

Если нам нужно больше операторов, мы должны сгруппироватьих с фигурными скобками {...}

0 голосов
/ 24 мая 2018

в отличие от python C ++ не заботится об отступах.но ваше другое применяется только в первой строке, для применения к блоку оно должно быть в пределах {}

else
{
   cout << " ";
   ++c;
}

отступ не является вашей проблемой здесь.

0 голосов
/ 24 мая 2018

Как C, так и C ++ не подвержены пробелам при интерпретации кода.Это не означает, что программист не должен заботиться о его неправильном использовании.

Лучший способ проиллюстрировать то, что на самом деле представляет собой приведенный выше код, - это явно определить все выведенные скобки, как показано ниже.Обратите внимание, что в операторе if, который не имеет фигурных скобок, есть только одна строка кода, затронутая предложением 'if then' или 'else'.

Это одна из причин, по которой люди пытаются настаивать на «хороших методах кодирования», чтобы другие люди могли четко интерпретировать поток и намерения программиста.

while(c != cols){
    if(r == pad + 1 && c == pad + 1){
        cout << greet;
        c+=greet.size();
    } else {
        if(r == 0 || r == rows - 1 || c == 0 || c == cols - 1){
            cout << "*";
        } else {
            cout << " ";
        }    
        ++c;
    }
}
0 голосов
/ 24 мая 2018

Пробелы не влияют на поведение C ++ во время выполнения.(В отличие от некоторых других языков, таких как Python).

Я должен упомянуть, что в вашем блоке else вы не используете фигурные скобки.Таким образом, только первое утверждение (cout << " ";) будет частью предложения else.Последующие ++c; будут выполняться независимо от значений r и c.

. Обратите внимание, что эта последняя точка субъективна, поэтому возьмите ее с крошкой соли ... Как видите,когда фигурные скобки опущены в if ... else ... блоках, существует вероятность путаницы.Некоторые утверждают, что это приводит к более сжатому коду, но многие (включая меня) утверждают, что вы всегда должны использовать фигурные скобки.Это особенно важно, когда вы работаете в большой команде, потому что код имеет тенденцию расти со временем.В производственном коде я видел много случаев, когда в выражении if отсутствовали фигурные скобки, и кто-то добавлял вторую строку в предложение if, не забывая добавлять фигурные скобки.Это не сработало, как ожидалось, и привело к потере времени на отладку, просто потому, что фигурные скобки были опущены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...