Использование «If Statements» в базовом C-программировании.Как я могу правильно отформатировать их? - PullRequest
0 голосов
/ 04 февраля 2019

Начнем с того, что код, который я получил до этого момента, приведен ниже.

Калькулятор делает все, что мне нужно, за исключением того факта, что он все еще включает отрицательные числа в свои вычисления.Я хотел бы, чтобы он ничего не делал, если число, представленное в качестве радиуса, меньше нуля, но все же рассчитал, является ли число неотрицательным.Однако у меня возникли проблемы с использованием оператора if.Я не использовал их раньше, так как я на самом деле только начинающий.Мне просто нужно подтолкнуть в правильном направлении.Должен ли я иметь "еще"?Любая помощь с благодарностью!

#include <stdio.h>

int radius, area;

main()
{
    printf("Enter radius: ");
    scanf("%d", &radius);
    {
    if (&radius > -1);  {
         area = (int)(3.14159 * radius * radius);
         printf("Area = %d\n", area);}
    else {
       return(0); }
    }
   return(0);
}

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

if (& radius> -1);

Потерять & до radius и потерять точку с запятой:

if ( radius > -1 ) { ... }

DoМне нужно иметь "еще"?

В данном конкретном случае нет.В ветке else вы не делаете ничего, что вы безоговорочно делаете (т. Е. Оператор return).Ветвь else понадобится вам только в том случае, если необходимо выполнить определенное действие только при сбое условия, например, вывести сообщение об ошибке:

if ( radius > -1 )
{
  ...
}
else
{
  printf( "Radius needs to be non-negative!\n" );
}
return 0;

Что касается того, какФормат, существует несколько стилей со своими преимуществами и недостатками.Стиль, который я предпочитаю, имеет { и } в своих собственных строках:

if ( condition )
{
  // if branch
} 
else if ( another condition )
{
  // else if branch
}
else
{
  // else branch
}

Этот стиль проще для меня читать, он делает более понятным, где начинаются или заканчиваются блоки и т. Д. Он также увеличиваетсяиспользование вертикального пространства, так что вы получаете меньше кода в окне, а это означает, что вам, возможно, придется прокручивать назад и вперед немного больше.

Существует так называемый стиль K & R, так как он был популяризирован Kernighan & Ritchie, где открытие { находится на той же строке, что и if или else:

if ( condition ) {
  // if branch
} 
else if ( condition ) {
  // else if branch
}
else {
  // else branch
}

Не вполне так же легко определить, где начинается блок, но не так уж плохо, и несколько более компактно, так что вы можете разместить больше строк кода в ограниченном пространстве.

Тогда есть стиль, который я вычеркиваю ненавижу , который ставит закрывающий } на той же строке, что и else или else if:

if ( condition ) {
  // if branch
} else if ( condition ) {
  // else if branch
} else {
  // else branch
}

Мне очень трудно читать и следовать этому стилю.Но это самый компактный стиль, который обычно используется в ситуациях, когда экранное пространство ограничено очень (например, на слайде PowerPoint в лекции, учебном пособии или чем-то еще).

Обратите внимание, что компилятору не важно, какой стиль вы используете, при условии, что открывающая и закрывающая скобки соответствуют друг другу.Вы можете поместить все в одну строку практически без пробелов, как:

if(radius>-1){area=(int)(3.14159*radius*radius);printf("Area = %d\n", area);}else{print("Radius needs to be non-negative!\n");}

Форматирование имеет значение только для вас и любого, кто должен читать / поддерживать ваш код.Какой бы стиль вы ни выбрали, будьте последовательны с ним.

0 голосов
/ 04 февраля 2019

Компилятор C не заботится о форматировании, теоретически вы можете делать все, что захотите, и нет единого мнения о том, что является / не является "правильным форматированием".

Однако большинство программистов придерживаютсяопределенный стиль, чтобы было проще читать исходный код;и если вы работаете в команде, то было бы хорошо, если бы все программисты в команде использовали один и тот же стиль, чтобы весь исходный код был согласованным.Чтобы достичь этого, может существовать формальное «руководство по стилю», и если оно есть, вы должны следовать ему.

Помимо этого, существуют некоторые общие правила, которым следует почти каждый:

  • вложенные блоки, разделенные фигурными скобками, каким-то образом отступают (либо с «N пробелами», либо «N символами табуляции») относительно родительского блока

  • случаев переключениязаявления будут исключениями из правил отступа.Как правило, утверждения каждого случая имеют отступ, даже если здесь нет скобок;и само ключевое слово case может иметь или не иметь отступы скобок родительского переключателя.

  • либо все скобки всегда находятся на одной строке;или начальные скобки находятся в конце строки, а конечные скобки могут находиться в начале строки, содержащей связанный оператор

  • , когда блок состоит из одного оператора;либо он всегда использует фигурные скобки и сам занимает строку, либо он никогда не использует фигурные скобки и использует ту же строку, что и его родитель.

  • пара else if всегда является исключениемправило «блок состоит из одного оператора» (if - это отдельный оператор, который никогда не рассматривается как отдельный блок, а люди притворяются, что else if - это одно ключевое слово elseif).

Что это означает, что (в зависимости от того, кто получил свой путь, когда спорил об этом) это может быть приемлемым:

int main() {
    int area;

    printf("Enter radius: ");
    scanf("%d", &radius);

    switch(radius) {
    case 0:
        return 0;
    case 1:
        return 1;
    }

    if (&radius > -1) {
        area = (int)(3.14159 * radius * radius);
        printf("Area = %d\n", area);
    } else return -1;
    return area;
}

.. и это также может быть приемлемым:

int main()
{
    int area;

    printf("Enter radius: ");
    scanf("%d", &radius);

    switch(radius)
    {
        case 0:
            return 0;
        case 1:
            return 1;
    }

    if (&radius > -1)
    {
        area = (int)(3.14159 * radius * radius);
        printf("Area = %d\n", area);
    }
    else
    {
        return -1;
    }
    return area;
}
0 голосов
/ 04 февраля 2019

Удалить точку с запятой

удалить точку с запятой, эти строки

if (&radius > -1);  {  

должны быть

if (radius > -1)  {

Следует сделатьэто для более удобного отслеживания оператора if-else

измените эти строки

printf("Area = %d\n", area);}

return(0); }

на

printf("Area = %d\n", area);
}

return(0); 
}

Вот стиль для оператора if-elseЯ думаю, что вам легче отслеживать свой код

if (condition) {
    statements;
} 
else if (condition) { 
    statements;
}
else {
    statements;
}
...