Давайте начнем с первой проблемы: вам действительно следует использовать фигурные скобки, чтобы явно инкапсулировать ваши циклы и операторы if-else, иначе только последующий оператор будет частью этого. Например:
if (condition)
goto fail;
goto fail;
Только первая goto fail;
является частью оператора if; вторая на самом деле является отдельной сущностью, даже если она имеет отступ, как если бы она была частью оператора if. (См. Это для разбивки реальной ошибки в коде Apple, на которой основан этот пример: https://dwheeler.com/essays/apple-goto-fail.html)
Так что исправьте правильные скобки и сделайте отступ правильно, чтобы код делал то, что похоже, что он делает.
Во-вторых, вы печатаете новую строку между логами c, которая печатает первую и вторую пирамиды, чтобы они никогда не могли существовать рядом. В этой новой строке вы должны вставить этот дополнительный пробел, а не в лог c вашей второй пирамиды.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int H;
//Ask for Height of Pyramid
do {
H = get_int("Height Please: ");
} while (H<=0 || H > 8);
for(int x = 0; x < H; x++) {
// Create left Aligned Pyramid
for(int y = 0; y < H; y++) {
if (x + y < H - 1) {
printf(" ");
}
else {
printf("#");
}
}
printf(" "); // With the curly braces and indentation fixed, we can clearly see this is not part of the logic of the first pyramid, but rather between the first and second pyramids where a space should be
// Create Right Aligned Pyramid
for(int y = 0; y < H; y++) {
if (x - y >= 0) {
printf("#");
// remove the space character that did not belong here and was causing compile errors when you failed to use curly braces
}
else {
printf(" ");
}
}
printf("\n"); // Much easier to see where this logic comes into play with curly braces and indentation fixed.
}
}
Пример вывода (в жестком коде H = 4):
# #
## ##
### ###
#### ####