У меня есть небольшая программа, которая пытается построить прямоугольный треугольник.
Границы, заданные программой, заключаются в том, что основание и высота должны находиться в диапазоне [10,20].
Код, кажется, прекрасно работает для построения треугольников в диапазоне [10,19].
Тем не менее, в граничных условиях [n, 20] или [20, n] выходной сигнал становится бесполезным и отказывается выходить из цикла for, который генерирует середину треугольника (между базовой и верхней линиями).
Буду признателен за помощь в определении проблемы, спасибо.
Я изучил проблему, но у меня нет практики, и ко мне следует относиться как к начинающему.
Проблема связана с циклом while или nested после комментария «BUILD».
Обратите внимание, что может быть один или два не относящихся к делу переменных, определенных выше этого уровня кода предоставленного кода.
//TRIANGLE//
if (shapeselect=2)
{
int base;
int height;
//prompt use for base measurement//
cout<<"Please select the size of the BASE of your triangle, in the range [10,20]\n"<<endl;
cin>>base;
while (base!=10&&base!=11&&base!=12&&base!=13&&base!=14&&base!=15&&base!=16&&base!=17&&base!=18&&base!=19&&base!=20)
{
cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout<<"You have entered an invalid value.\nPlease enter a valid value for the BASE of your triangle in the range of [10,20].\n";
cin>>base;
}
//prompt user for height measurement//
cout<<"Please select the size of the HEIGHT of your triangle, in the range of [10,20].\n";
cin>>height;
while (height!=10&&height!=11&&height!=12&&height!=13&&height!=14&&height!=15&&height!=16&&height!=17&&height!=18&&height!=19&&height!=20)
{
cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout<<"You have entered an invalid value.\nPlease enter a valid value for the HEIGHT of your triangle, in the range [10,20].\n";
cin>>base;
}
//BUILD TRIANGLE//
string bottom(base, '*');
string top="*";
int middlerows=height-1;
cout<<top<<endl;
while (middlerows!=1)
{
int middlespacechars;
for (middlespacechars=0; middlespacechars!=base-2; ++middlespacechars)
{
string middlespace(middlespacechars, ' ');
cout<<"*"<<middlespace<<"*\n";
--middlerows;
}
}
cout<<bottom<<"\n"<<endl;
cout<<"^TRIANGLE\n";
cout<<"BASE = "<<base<<endl;
cout<<"HEIGHT = "<<height<<endl;
cout<<goodbye<<"\n"<<endl;
}
}
Верх треугольника печатает (один «*»).
Затем средняя часть треугольника повторяется бесконечно (звездочки с пробелами между ними).
Считая строки, кажется, что он достигает случая пробелов base-2, но не выходит. Кажется, чтобы добраться до линии «19/20» .