Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
#1

Насколько плохой код - C++

22.01.2013, 22:10. Просмотров 641. Ответов 11
Метки нет (Все метки)

Всем привет, пару дней назад начал изучать С++( До этого изучал С ), в качестве практики ( изучаю по Шилдту ) в функциях написал такой простенький калькулятор:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
 
using namespace std;
 
double calc(char x, char y, char c);
 
int main()
{
    char i, b;
    char c;
    
cout << "Введите первое число: ";
    cin >> i;
cout << "Введите второе число: ";
    cin >> b;
cout << "Введите действие: ";
    cin >> c;
    
if ((i >= '0' && i <= '9') && (b >= '0' && b <= '9'))
{
    if (c == '+'|| c == '-' || c == '*' || c == '/')
    cout  << "Ответ: " << calc(i,b,c);
    else cout << "Неверно указано действие.";
}
    else cout << "Пожалуйста, введите цифры.";
    return 0;
}
 
 
 
 
double calc(char x, char y, char c)
{
    x -= '0';
    y -= '0';
switch (c)
    {
        case '-': return x - y;
                break;
        case '+': return x + y;
                break;
        case '/': return x / y;
                break;
        case '*': return x * y;
            break;
    }
}
Хотел бы узнать, насколько это плохо? А точнее, каких моментов лучше избегать, а какие наооборот использовать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2013, 22:10     Насколько плохой код
Посмотрите здесь:

Плохой калькулятор: как его сделать нормальным? (улучшить код) - C++
Как его сделать нормальным ? :cry: #include &lt;functional&gt; #include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;string&gt; #include...

Насколько плохо написан код? - C++
написал программу с горем да пополам, но появился вопрос о ее качестве. насколько плохо она написана? стояла такая задача: программа...

плохой gets() - C++
Всем привет !! Сталкнулся с такой проблемой что оператор gets() нехочет выполнять есле передним стоит scanf вот пример #include...

Чем плохой указатель на void? - C++
Здравствуйте! Недавно прочитал статью на хабре http://habrahabr.ru/post/102930/ Сабж - архитектура игрового двигла, а именно менеджер...

Объединять классы и внешние функции в одной программе плохой тон программирования? - C++
Доброго времени суток! Преподаватель в институте задал определённую задачу, однако не определил разрешённые возможности. Сказал только -...

При удалении первого элемента из динамического списка присваивается плохой указатель - C++
Проблема появляется только при удалении первого элемента. // Запись содержит марку автобуса, максимальную скорость, вместимость. //...

Насколько сильно зашифрован объект? - C++
Насколько сильно зашифрован объект, записанный в бинарный файл функцией write?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
22.01.2013, 22:22     Насколько плохой код #2
Цитата Сообщение от RussDragon Посмотреть сообщение
C++
1
using namespace std;
Я бы это убрал.
В функции calc для множественного выбора лучше бы еще добавить секцию default
C++
1
case '/': return x / y;
y на ноль проверить не забудьте
Troll_Face
600 / 400 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
22.01.2013, 22:23     Насколько плохой код #3
39, 41, 43 и 45 строка, там надо бы break убрать, ибо выполнение дальнейших операторов не произойдет, т.к. там после каждого оператора стоит return, который завершит функцию. а так вроде все норм.
MrGluck
Модератор
Эксперт CЭксперт С++
7188 / 4354 / 634
Регистрация: 29.11.2010
Сообщений: 11,845
22.01.2013, 22:24     Насколько плохой код #4
Заместо (i >= '0' && i <= '9')
isdigit(i)
форматирование хромает
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
22.01.2013, 22:26     Насколько плохой код #5
Цитата Сообщение от RussDragon Посмотреть сообщение
Введите первое число:
пользователь будет вводить число, а у вас место только под одну цифру
MrGluck
Модератор
Эксперт CЭксперт С++
7188 / 4354 / 634
Регистрация: 29.11.2010
Сообщений: 11,845
22.01.2013, 22:26     Насколько плохой код #6
в операторе множественного выбора нет default-a
RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
22.01.2013, 23:13  [ТС]     Насколько плохой код #7
Да не текст в коутах не обращайте внимание, писал чтобы можно было понять, что вводить. Я пока не хочу начинать работу с массивами, т.к. в С++ еще не прошел их.
Дефолт я не поставил по одной причине, он вроде как не обязателен... Break использовался так же в качестве того, чтобы понять где заканчивается каждый из кейсов, а форматирование хромает, да. Пытался принимать чисто int число, но при вводе буквы программу колбасит и она слетает. Еще в С сталкивался с проблемой форматирования из Чара в интигер.
А за критику спасибо, для меня она очень важна
Croessmah
Модератор
Эксперт CЭксперт С++
13063 / 7326 / 817
Регистрация: 27.09.2012
Сообщений: 18,085
Записей в блоге: 3
Завершенные тесты: 1
22.01.2013, 23:36     Насколько плохой код #8
Цитата Сообщение от RussDragon Посмотреть сообщение
он вроде как не обязателен...
не обязателен, но что будет, если введенный символ отличен от тех, которые проверяются в операторе выбора?
Цитата Сообщение от RussDragon Посмотреть сообщение
Пытался принимать чисто int число, но при вводе буквы программу колбасит и она слетает
Такие ситуации необходимо обрабатывать отдельно.
gray_fox
What a waste!
1449 / 1178 / 62
Регистрация: 21.04.2012
Сообщений: 2,466
Завершенные тесты: 3
22.01.2013, 23:46     Насколько плохой код #9
Цитата Сообщение от RussDragon Посмотреть сообщение
Дефолт я не поставил по одной причине, он вроде как не обязателен...
Лучше всегда писать default и, если это "вроде как недостижимий код", делать там какую-нибудь "гадость" (например, assert(false);).
RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
23.01.2013, 09:55  [ТС]     Насколько плохой код #10
Просто в Switch с idigit и if'кой на проверку, врядли туда уйдут не те символы.

Цитата Сообщение от Croessmah Посмотреть сообщение
Такие ситуации необходимо обрабатывать отдельно.
В смысле?
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
23.01.2013, 10:01     Насколько плохой код #11
Цитата Сообщение от RussDragon Посмотреть сообщение
Такие ситуации необходимо обрабатывать отдельно.
В смысле?
Например проверять состояние потока после ввода.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
int main()
{
    int x;
    
    std::cout << "Enter number: ";
    
    // ввод x и проверка cin
    while(!(std::cin >> x))
    {
        // сброс флагов
        std::cin.clear();
        
        // чтение лишних символов
        while(std::cin.get() != '\n');
        
        std::cout << "Wrong input! Enter again: ";
    }
    
    std::cout << "x = " << x << "\n";
    
    
    return 0;     
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2013, 10:03     Насколько плохой код
Еще ссылки по теме:

насколько это соответствует стандарту? - C++
#include &lt;iostream&gt; class shit { private: int x; public: shit(){} shit(int p) { x = p; } void set (int*...

Насколько корректно будет работать замыкание? - C++
Мой друг-JS'ер бросил мне очередной челлендж. В этот раз он мне предложил сделать замыкание для a*x+y function line(k,b){ return...

GDI+, насколько актуален этот интерфейс - C++
Добрый вечер! Вот задался вопросом насчет GDI+, насколько актуален этот интерфейс,где его конкретно применяли, какие продукты написаны с...

Определить, насколько случайное число случайно - C++
Учебная программа определяющая насколько случайное число случайно. из книги Оверленд Брайэн -С++ без страха. Я вставил директиву int hits;...

Применимы ли учебники по C к C++? Насколько различен их синтаксис? - C++
Всем привет. Дали в универе литературу к экзамену по языку C, а экзаменационные вопросы по языку С++. Применимы ли учебники по C к C++, у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
23.01.2013, 10:03  [ТС]     Насколько плохой код #12
А, ну пока что я в этом еще не разбирался ( В функции std:: ), но за совет спасибо.
Yandex
Объявления
23.01.2013, 10:03     Насколько плохой код
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru