Там много неправильно с вашим кодом. Для начала:
int ..., backup1, ...;
while(backup1 > 0) {
cout << "0";
backup1 = backup1--;
}
Какое там значение backup1
? Ответ фигня! Это неопределенное поведение, поэтому значение в backup1
может быть любым целым числом !! Поэтому неудивительно, что вы видите целую кучу 0
!
Но если предположить, что мы это исправим, то, возможно, что-то вроде int backup1 = 5;
, backup = backup--;
также будет неопределенным поведением !!
Небольшие ошибки, подобные этим, повсюду в вашем коде ( @ Christophe хорошо объясняет их в своем ответе). Поэтому я настоятельно рекомендую вам удалить это и переписать. Позвольте мне дать вам несколько советов, чтобы вам было легче ...
У вас хорошее начало, вы поняли, что верх и низ песочных часов будут 2 * height - 1
. Это хорошо. Мой первый совет для вас - перестать пытаться печатать по одному резкому за раз. Вы можете очень легко создать строку с некоторым количеством одинаковых символов, используйте это!
Например, поскольку вы знаете, сколько острых предметов в первом ряду, вы можете вывести ее с помощью:
int num_sharps = 2*height - 1;
int num_spaces = 0;
std::cout << std::string(num_spaces, ' ')
<< std::string(num_sharps, '#')
<< std::endl
Это выведет num_spaces
количество пробелов, затем num_sharps
количество острых предметов и затем новую строку. Viola!
И теперь следующая строка, которую нужно напечатать, будет иметь на два резких резца меньше этого и еще один пробел, поэтому обновите эти значения соответствующим образом и снова запустите выходную строку!
С этим, Вы должны быть в состоянии очень легко и чисто изготовить свои песочные часы (хотя вам может понадобиться второй l oop для другой половины!).
И в качестве бонуса просто для удовольствия, вот полный решение всего за несколько строк, чтобы показать, что с достаточным количеством математики возможно все: D