Оцените программу пожалуйста
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Моя первая более менее серьёзная программа.
Вот ссылка на приложение и код — https://drive.google.com/folderview?id=0B0nHGxfmK8HeY011Z3plSjBkams&usp=sharing
Если не сложно напишите отзыв и какой-нибудь комментарий!
Это так называемый Open sourse проект)
Неопределенно. В месте «Смотреть другие? (0 или 1)» нужно обозначить, что 0 это выход из программы.
И еще я бы ввел проверку на ввод других чисел.
Но идея есть :)
проверка недействительного диапазона присутствует!
Юрий,выбор исправил
Освойте какую-нибудь систему контроля версий, например Git. И держите код на github.com.
Любой нормальный программист обязан уметь работать с системами контроля версий.
Слава, ты сам попросил отзыв и какой-нибудь комментарий... так что без обид.
Первая реакция на твой код: «убейсебяапстену!».
Вторая реакция: классический пример того, как не надо писать программы на С/С++.
Потом пришла мысль, что человек видимо портировал программу с Basic розлива 1985 года или Fortran66: обилие if'ов и спагетти из goto.
Слава, я понимаю, что ты «новичок», но ТАК писать программы на С++ нельзя — камнями побьют.
Это была эмоциональная часть. Теперь попробую перейти к конструктивной.
(1) Я уже тебе отвечал, что цитаты лучше хранить отдельно от кода. В этом случае можно сделать программу полностью независимой от данных (цитат), а данные изменять/дополнять без перекомпиляции программы. Мы же не перекомпилируем Adobe Reader для просмотра очередного PDF.
(2) Для каждой цитаты заводить отдельную переменную — не самая здравая идея. Для этого существуют массивы. Выводить каждую цитату отдельным оператором — тоже не good, для этого существуют циклы.
(3) Одно из правил хорошего стиля программирования гласит: если фрагмент кода повторяется более одного раза — сделайте его подпрограммой. Здесь у тебя обширное поле для деятельности... целина, можно сказать.
(4) Ещё одно правило хорошего стиля программирования: оператор goto считать вредным. (кстати (с) Э. Дейкстра) В твоём коде goto используется и там, где можно, и там, где не нужно. Например:
Зачем нужен
goto returning;
? Обходим веткуelse
, которая и так не будет выполняться?В программе явно угадываются три цикла: основной, показывающий цитаты, и два цикла проверки правильности ввода пользователя (тема цитат и выбор автора цитат). Вот и надо их сделать циклами (do/while например), а не эмулировть циклы с помощью goto.
(5) Кроме оператора
if
в С/С++ ещё существует и операторswitch
. Почему-то о нём частенько забывают. Это я про многочисленные if'ы при выборе цитат в зависимости от выбора пользователя.(6) Операция логического ИЛИ обозначается
||
, а символом|
обозначается операция побитового ИЛИ. Это разные вещи. И то, что операторif (vibor == 1 | vibor == 2 | vibor == 3)
срабатывает правильно (кстати, можешь объяснить почему?), не означает, что эти операции взаимозаменяемы ))(7) Оформление кода желает много лучшего.
И последнее, убери упоминание про яндекс-деньги. Во-первых, в сочетании с исходным кодом выглядит как «поможите, люди добре, копеечкой на пропитание». А во-вторых, до «начинающего разработчика» тебе ещё учиться и учиться.
Резюме. Желание программировать есть — и это хорошо. Знаний и опыта — нет.
Рекомендации. Читать, изучать книги по программированию на С++, учить язык, учить стандартные библиотеки — это в первую очередь. Читать книги по методологии программирования и по проектированию программ. И... писать программы.
Удачи!
спасибо
Хочу отметить, что именно циклы как раз и эмулируют
goto
— процессорныйjmp
на уровне ассемблера.Но это так, просто дополнение. Метки использовать неудобно, поэтому их заменили человеческими конструкциями циклов и условных операторов в более высокоуровневых ЯП.
selevit, давай не будем мешать в одну кучу языки высокого (или хотя бы «среднего») уровня и ассемблер x86. Имеется масса языков программирования, в которых оператора
goto
или его аналога, нет вообще. Это не значит, что компиляторы таких языков принципиально нереализуемы для архитектуры x86 )))Метки и
goto
не рекомендуется использовать не потому, что «неудобно», а потому, что их неконтролируемое использование приводит к:В C++ оператор
goto
был оставлен для выхода из глубоко вложенных циклов, дабы не загромождать код лишними логическими переменными и проверками.Про
goto
можно почитать у Дейкстры, Вирта, Страуструпа и других корифеев.В общем, приводят к усложнению дальнейшей поддержки кода. Работать над глючным неподдерживаемым кодом — это как раз то, что я имел ввиду под словом «неудобно».
А я и не мешаю. Ты сказал про эмуляцию циклов через
goto
, вот я и дополнил, чтоgoto
ничего не эмулирует на самом деле, но транслируется вjmp
компилятором.