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

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

Восстановить пароль Регистрация
 
RussDragon
 Аватар для RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
22.01.2013, 22:10     Насколько плохой код #1
Всем привет, пару дней назад начал изучать С++( До этого изучал С ), в качестве практики ( изучаю по Шилдту ) в функциях написал такой простенький калькулятор:
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;
    }
}
Хотел бы узнать, насколько это плохо? А точнее, каких моментов лучше избегать, а какие наооборот использовать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
22.01.2013, 22:22     Насколько плохой код #2
Цитата Сообщение от RussDragon Посмотреть сообщение
C++
1
using namespace std;
Я бы это убрал.
В функции calc для множественного выбора лучше бы еще добавить секцию default
C++
1
case '/': return x / y;
y на ноль проверить не забудьте
Troll_Face
 Аватар для Troll_Face
599 / 399 / 4
Регистрация: 26.04.2012
Сообщений: 2,070
22.01.2013, 22:23     Насколько плохой код #3
39, 41, 43 и 45 строка, там надо бы break убрать, ибо выполнение дальнейших операторов не произойдет, т.к. там после каждого оператора стоит return, который завершит функцию. а так вроде все норм.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,426
22.01.2013, 22:24     Насколько плохой код #4
Заместо (i >= '0' && i <= '9')
isdigit(i)
форматирование хромает
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
22.01.2013, 22:26     Насколько плохой код #5
Цитата Сообщение от RussDragon Посмотреть сообщение
Введите первое число:
пользователь будет вводить число, а у вас место только под одну цифру
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,426
22.01.2013, 22:26     Насколько плохой код #6
в операторе множественного выбора нет default-a
RussDragon
 Аватар для RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
22.01.2013, 23:13  [ТС]     Насколько плохой код #7
Да не текст в коутах не обращайте внимание, писал чтобы можно было понять, что вводить. Я пока не хочу начинать работу с массивами, т.к. в С++ еще не прошел их.
Дефолт я не поставил по одной причине, он вроде как не обязателен... Break использовался так же в качестве того, чтобы понять где заканчивается каждый из кейсов, а форматирование хромает, да. Пытался принимать чисто int число, но при вводе буквы программу колбасит и она слетает. Еще в С сталкивался с проблемой форматирования из Чара в интигер.
А за критику спасибо, для меня она очень важна
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,915
Записей в блоге: 2
Завершенные тесты: 1
22.01.2013, 23:36     Насколько плохой код #8
Цитата Сообщение от RussDragon Посмотреть сообщение
он вроде как не обязателен...
не обязателен, но что будет, если введенный символ отличен от тех, которые проверяются в операторе выбора?
Цитата Сообщение от RussDragon Посмотреть сообщение
Пытался принимать чисто int число, но при вводе буквы программу колбасит и она слетает
Такие ситуации необходимо обрабатывать отдельно.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
22.01.2013, 23:46     Насколько плохой код #9
Цитата Сообщение от RussDragon Посмотреть сообщение
Дефолт я не поставил по одной причине, он вроде как не обязателен...
Лучше всегда писать default и, если это "вроде как недостижимий код", делать там какую-нибудь "гадость" (например, assert(false);).
RussDragon
 Аватар для RussDragon
12 / 12 / 1
Регистрация: 08.04.2012
Сообщений: 81
23.01.2013, 09:55  [ТС]     Насколько плохой код #10
Просто в Switch с idigit и if'кой на проверку, врядли туда уйдут не те символы.

Цитата Сообщение от Croessmah Посмотреть сообщение
Такие ситуации необходимо обрабатывать отдельно.
В смысле?
Schizorb
 Аватар для Schizorb
508 / 460 / 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 к C++? Насколько различен их синтаксис? C++
Объединять классы и внешние функции в одной программе плохой тон программирования? C++
Определить, насколько случайное число случайно C++

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

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

Текущее время: 15:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru