Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
#include <iostream>
#include <string>
using namespace std;
bool vetka1(bool &flag, int i, const string stroka) {
int j = 1;
for (j += i; j < stroka.length(); j++) {
switch (stroka[j]) {
case '.':
if (flag) return false;
flag = true;
break;
case '1' ... '9': break;
default: return false; } }
return true; }
bool vetka2_dalshe(const string stroka) {
for (int j = 1; j < stroka.length(); j++) {
switch (stroka[j]) {
case '0' ... '9': break;
default: return false; } }
return true; }
bool vetka2(const string stroka) {
switch (stroka[0]) {
case '+':
case '-':
if (stroka.length() < 2) return false;
return vetka2_dalshe(stroka);
break;
case '0' ... '9': return vetka2_dalshe(stroka); break;
default: return false; break; } }
bool mantissa(const string stroka, bool &flag, int &index) {
for (int j = 0; j < stroka.length(); j++) {
switch (stroka[j]) {
case 'e':
case 'E':
if (flag) return false;
if (j == (stroka.length() - 1)) return false;
flag = true;
index = j;
break; } }
return true; }
bool Dalshe(int i, const string stroka) {
int index_mant;
bool flag_dot = false;
bool flag_mant = false;
if (not mantissa(stroka, flag_mant, index_mant)) return false;
else {
if (flag_mant) {
string sub1 = stroka.substr(0, index_mant);
string sub2 = stroka.substr(index_mant+1);
return (vetka1(flag_dot, i, sub1) and vetka2(sub2)); }
else return vetka1(flag_dot, i, stroka); } }
bool proverka(const string stroka) {
switch (stroka[1]) {
case '0' ... '9': return Dalshe(1, stroka); break;
default: return false; break; } }
bool general_proverka(const string stroka) {
switch (stroka[0]) {
case '-':
case '+':
if (stroka.length() > 1) return proverka(stroka);
else return false;
break;
case '0' ... '9': return Dalshe(0, stroka); break;
default: return false; break; } }
long double opros(char s) {
string argument;
do {
cout << "Введите значение " << s << ": ";
getline(cin, argument);
if (argument.length() == 0) cout << "Вы не ввели значение!" << endl;
else if (not general_proverka(argument)) cout << "Некорректное значение!" << endl;
else break;
} while (true);
return atof(argument.c_str()); }
int main() {
for (char i = 'a'; i < 'd'; i++) {
long double a = opros(i);
cout << "Значение: " << a << " - корректное!" << endl;
}
}
В общем, частично переписал некоторые куски кода. Отчасти тут предыдущая версия (с дублированием кода),
что, конечно, не менее говно, но зато стало чуть читабельнее и работает без очевидных багов, как в исходной версии,
например: если в исходной версии ввести - "3w", то значение отображалось, как корректное, что не верно.
Эмм, "форматирование хуевое, потому что в 100 строк приходится укладываться", или "в 100 строках нельзя передать всю хуевость форматирования, и поэтому форматирование кода не сделать еще более хуевым"?
Вообще, тут даже с идентацией косяки, нет отступов для do цикла
long double opros(char s) {
string argument;
do {
cout << "Введите значение " << s << ": ";
getline(cin, argument);
if (argument.length() == 0) cout << "Вы не ввели значение!" << endl;
else if (not general_proverka(argument)) cout << "Некорректное значение!" << endl;
else break;
} while (true);
return atof(argument.c_str()); }
Какой break }}}
На самом деле писать break в любом не-fallthrough case — неплохая привычка. Сейчас там return, а через месяц его заменят на какой-нибудь вызов — и привет, дико неприятный и трудноуловимый баг.
KAPA6AXCKuu_nemyx # 0
MAKAKA # 0
j123123 # 0
bormand # 0 ⇈
З.Ы. Почему мне так хочется натравить "AFL" на этот код?
j123123 # 0 ⇈
Эмм, "форматирование хуевое, потому что в 100 строк приходится укладываться", или "в 100 строках нельзя передать всю хуевость форматирования, и поэтому форматирование кода не сделать еще более хуевым"?
Вообще, тут даже с идентацией косяки, нет отступов для do цикла
А отступы никак на количество строк не влияют
bormand # 0 ⇈
1024-- # 0 ⇈
Так это смайлик.
Какой break после return )))
gost # 0 ⇈
На самом деле писать break в любом не-fallthrough case — неплохая привычка. Сейчас там return, а через месяц его заменят на какой-нибудь вызов — и привет, дико неприятный и трудноуловимый баг.
bormand # 0
bormand # 0