#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
условия цикла, вы сможете добиться желаемых результатов. Пока вы уменьшаете первый цикл, вы можете увеличить вложенный цикл. Первый цикл выведет нисходящую космическую пирамиду, а второй цикл выведет восходящую # пирамиду. Надеюсь, это имеет смысл.