Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
// В преддверии нового года на сайте PVS-Studio увеличилось количества C++ говнокода.
// Во-первых, вышла подбора багов за год, а во-вторых, квиз на поиск багов.
// Первый пример кода из квиза для разминки:
void UObject::setDeltaPitch(const UMatrix &gizmo) {
....
if (_fpzero(amount, eps))
return
rotateAccum.setAnglesXYZ(axis);
....
}
// Конкурс для C++ программистов от команды PVS-Studio
// Уникальная возможность получить приз за говнокод с багом!
// https://habr.com/ru/companies/pvs-studio/articles/775388/
Поделитесь своим кодом с ошибкой и участвуйте в розыгрыше 10 книг "Вредные советы для C++ программистов". Подробности в публикации на Хабре: Конкурс для C++ программистов и их любимых багов - https://habr.com/ru/companies/pvs-studio/articles/775388/
void text::draw()
{
CmdWinGUI::draw();
COORD temp = startCo; //Разный мусор
COORD tempEnd = startCo;
int16_t _al = 0;
int16_t _an = 0;
int16_t remain = 0;
uint8_t a = 0;
bool fullRow = 1; //Флаги, не изменять
bool alignPrepare = 0;
if (tableLine)
{
temp.Y = temp.Y + lineShift + sepShift;
}
if (!tableFormat)
{
if (alignSetting == ALIGN_C)
{
_al = sizeCo.X/2;
for (uint8_t a = 0;a < 0xFF;++a) //Измеряем длину текстового поля
{
if (textBuffer[a] == NULL)
break;
++remain;
}
temp.X=startCo.X+ _al-remain/2; //Корректируем курсор в соответствии с расчётами
if (temp.X < startCo.X) //Если предыдущие вычисления дали ошибку - выход за предел рамки слева
temp.X = startCo.X; //Корректируем
}
for (;;)
{
SetConsoleCursorPosition(hCon, temp);
if (textBuffer[a] == NULL)
break;
printf("%c", textBuffer[a]);
++temp.X;
++a;
if (temp.X == startCo.X + sizeCo.X - 1) //Проверяем достигло ли рамки, иначе обрываем цикл
break;
}
return;
}
for (uint8_t b = 0;b<=filledRows;++b)
{
if (!fullRow)
{
temp.X = tempEnd.X;
}
tempEnd.X += tableRowSize[b] - 1;
if (alignSetting == ALIGN_C)
{
--temp.X;
//Предварительные расчеты смещения
if (!alignPrepare)
{
for (SHORT a = temp.X;a < 0xFF;++a)
{
if (a == tempEnd.X) //Проверяем достигло ли рамки, иначе обрываем цикл
{
--_an;
break; //половина длины поля таблицы
}
++_an;
}
for (uint8_t a = 0;a < 0xFF;++a)
{
if (tableText[b][a] == NULL)
{
_al = a; //половина длины слова
break;
}
}
alignPrepare = 1; //Подымаем флаг готовности
}
//Коррекция положения курсора в соответствии с результатами блока предварительных расчётов
temp.X += abs(_an / 2) - abs(_al / 2);
_an = 0;
}for (;;){
SetConsoleCursorPosition(hCon, temp); //Ставим курсор в начало/середину/конец поля
if (tableText[b][a] == NULL)
{
fullRow = 0; //При окончании поля текста до заполнения поля снимаем флаг заполнения поля
break;
}
++temp.X;
if (temp.X == tempEnd.X) //Проверяем достигло ли рамки, иначе обрываем цикл
{
fullRow = 1; //При окончании поля в таблице до завершения поля текста прекращаем вывод и выходим из цикла
break;
}
printf("%c", tableText[b][a]);
++a;
}
a = 0;
alignPrepare = 0; //Сбрасываем флаг для следующей итерации
}
if (isChanged)
this->editFlagSwitch();
}