У вас есть две основные проблемы:
вы пишете пробелы после 0, а не до того, чтобы иметь отступ 0
for (k = 0; k <= c; k = k - 1)
никогда не заканчивается возможным эффектом переполнения
Я также рекомендую вам проверить результат >>
, чтобы убедиться, что введено правильное целое число, например if (!(cin >> triHeight)) cerr << "invalid height" << endl; else { ... }
Правильный подход к использованию петель для всех (если вы хотите пирамиду):
#include <iostream>
using namespace std;
int main()
{
int triHeight;
cout << "Enter the triangle height: " << endl;
if (!(cin >> triHeight))
cerr << "invalid height" << endl;
else {
for (int h = 1; h <= triHeight; h += 1) {
for (int s = triHeight - h; s != 0; s -= 1)
cout << ' ';
for (int z = 2*(h-1)+1; z >0; z -=1)
cout << '0';
cout << endl;
}
}
}
Компиляция и исполнение:
/tmp % g++ -pedantic -Wextra -Wall c.cc
/tmp % ./a.out
Enter the triangle height:
5
0
000
00000
0000000
000000000
/tmp %
Если вы хотите половину пирамиды:
#include <iostream>
using namespace std;
int main()
{
int triHeight;
cout << "Enter the triangle height: " << endl;
if (!(cin >> triHeight))
cerr << "invalid height" << endl;
else {
for (int h = 1; h <= triHeight; h += 1) {
for (int s = triHeight - h; s != 0; s -= 1)
cout << ' ';
for (int z = 0; z < h; z += 1)
cout << '0';
cout << endl;
}
}
}
Компиляция и исполнение:
/tmp % g++ -pedantic -Wall -Wextra c.cc
/tmp % ./a.out
Enter the triangle height:
5
0
00
000
0000
00000
/tmp %
Вы также не можете сделать две внутренние петли самостоятельно:
#include <iostream>
using namespace std;
int main()
{
int triHeight;
cout << "Enter the triangle height: " << endl;
if (!(cin >> triHeight))
cerr << "invalid height" << endl;
else {
for (int h = 1; h <= triHeight; h += 1)
cout << string(triHeight - h, ' ') << string(h, '0') << endl;
}
}
Компиляция и исполнение:
/tmp % g++ -pedantic -Wall -Wextra c.cc
/tmp % ./a.out
Enter the triangle height:
5
0
00
000
0000
00000
/tmp %
это решение короче, но создает временные строки