CS50, предустановка 1, Марио удобнее — Ошибка: ожидаемое выражение

#c #cs50

#c #cs50

Вопрос:

Я работаю над предустановкой 1 для CS50, Марио удобнее. Я пытался скомпилировать приведенный ниже код, но получаю сообщение «ошибка: ожидаемое выражение». Я проверил правописание, точки с запятой, скобки и круглые скобки, но, похоже, все в порядке. Мысли?

Код:

 #include <stdio.h>
#include <cs50.h>

int main(void)

{
    // declare h

    int h;

    // get integer (user input) between 1 and 8, inclusive
do
{
    h = get_int("Height: n");

    // if integer is greater than 8 or less than 1, prompt the user again until they enter a valid input
}while(h > 8 || h < 1);

        // outer loop uses i to print a row of bricks h times
        for (int i = -1; i < h; i  )
        {
            // inner loop uses j to print a column h times
            for (int j = 0; j <= h; j  )
            {

                // e.g. if 8   8 > (8 - 1), print hash; else print blank: right-aligns
                if (i   j > (h - 1))
                {
                    printf("#");
                }

                printf("  ");

                // e.g. if 8   8 < (8 - 1), print hash; else print blank: left-aligns
                else if (i   j < (h - 1))
                {
                    printf("#");
                }

            }

            printf("n");
        }
    }
  

Сообщение об ошибке:

 error: expected expression
                else (i   j < (h - 1))
  

Ожидаемые результаты этого упражнения:

        #  #
      ##  ##
     ###  ###
    ####  ####
   #####  #####
  ######  ######
 #######  #######
########  ########
  

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

1. В вашем коде нет else (i j < (h - 1)) . Ваш код есть else if (i j < (h - 1)) . Голосование за закрытие как опечатку или невоспроизводимость.

2. Вместо этого я получил «ошибка: ‘else’ без предыдущего ‘if'». Это связано с printf(" "); тем, что раньше else if (i j < (h - 1))

3. Простое удаление else не привело к правильному выводу. Голосование отменено.

4.Но неправильное расположение else является причиной ошибки компиляции. Неправильный результат связан с алгоритмом. Ему нужен цикл с каждой стороны printf(" "); каждого с решением, печатать '#' или ' ' . Или, может быть, два цикла с каждой стороны 🙂

5. printf(" "); появляется после if { ... } и перед else if { ... } . Это недопустимо, ваш if .. else if ... неверно сформирован.

Ответ №1:

У вас ошибка из-за else if

Оператор if предлагает компьютеру проверить условие и продолжить выполнение инструкции внутри фигурных скобок {}. Когда вы выходите из этих фигурных скобок и пишете другое утверждение или выражение, вы в основном оставляете эту проверку условий. После этого, если вы хотите проверить условие, вам следует использовать if снова. Вы можете использовать else if if оператор right after, чтобы проверить, имеет ли значение другое условие.

 h = 5;
x = 3;
if (h < x)
    printf("h is less than xn");
x = 10;

if (h < x)
    printf("h is less than xn");
else if (h > x)
    printf("h is bigger than xn);
else
    printf("h is equal to xn");
  

программа проверит первое if условие, чем вычислит выражение x = 10 , затем продолжит чтение следующих строк и проверит второе if условие с новыми значениями, затем проверит else if и позже else .

после того, как я исправил это, я проверил ваш код, и он выдает не пирамиду, а квадратную печать. Если вы не решили эту проблему, попробуйте добавить printf(" "); пробелы для печати, чтобы создать форму пирамиды. Логика заключается в уменьшении размера пробелов при увеличении размера #. Если вы измените for условия цикла, вы сможете добиться желаемых результатов. Пока вы уменьшаете первый цикл, вы можете увеличить вложенный цикл. Первый цикл выведет нисходящую космическую пирамиду, а второй цикл выведет восходящую # пирамиду. Надеюсь, это имеет смысл.