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

Насколько плохо написан код? - C++

Восстановить пароль Регистрация
 
 
pavlenko2k16
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 88
02.10.2016, 18:41     Насколько плохо написан код? #1
написал программу с горем да пополам, но появился вопрос о ее качестве. насколько плохо она написана? стояла такая задача:
программа содержит массив строк, каждый из которых представляет собой запись про учетную запись пользователя, а каждое поле отделяется от другого двоеточием. известно, что первое поле сохраняет логин, пятое - имя и фамилию через запятую, а шестое - пароль
запросить логин пользователя. если логин неизвестный, то запросить логин заново. предусмотреть выход из программы если будет введено слово "bye". Если логин найдено в массиве, то вывести поздравление со значением имени и попросить ввести пароль. по результатам проверки пароля вывести на экран сообщение об успешной авторизации или дать пользователю дополнительную попытку. предусмотреть не более двух дополнительных попыток.
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
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <string.h>
#include <fcntl.h>
#include <algorithm>
using namespace std;
int main () {
    setlocale (0, "");
    int i=0;
    char login[15], password[25];
    char* database[] = {"admin::::Владислав,Павленко:pavlenko2k16","VKopturov::::Владислав, Коптуров:KopturovV","MZadoyan::::Мирослав, Задоян:ZadoyanM",
    "DZinenko::::Данил, Зиненко:ZinenkoD","NIlchenko::::Николай, Ильченко:IlchenkoN","OKoval::::Олег, Коваль:KovalO","MMalukov::::Михаил, Малюков:MalukovM",
    "LMedzhina::::Любовь, Меджина:MedzhinaL","EYaremchenko::::Евгений, Яремченко:YaremchenkoE","DKolpakova::::Дарья, Колпакова:KolpakovaD"}; // Задаем пользователей
    start:
    for(;;){
        cout << " Введите логин: "; // Просим ввести логин
        cin.getline(login, 15); // Принимаем ввод
        if (strcmp(login, "bye") == 0)
        exit(0);
        for (i=0; i<10; i++) { // Проверяем логин в каждой строке
        char* num = strchr(database[i], ':'); //ищет номер первого входа : в строку
         if (strncmp(database[i],login,num-database[i])==0) // если логин и элементы до первого входа : совпадают - переход к приветствию
        goto privetstvie;
        }
}
privetstvie:
    
    cout<<"Введите пароль, ";
    string str = database[i];//присваиваем 
    string separ(","); //разделитель
    string::size_type pos = str.find(",");//ищем положение разделителя
    string first = str.substr(0, pos);//до разделителя
    string second = str.substr(pos+separ.length());//после разделителя
    string separate("::::"); //разделитель
    string::size_type pos3 = str.find("::::");//ищем положение разделителя
    string five = first.substr(0, pos3);//до разделителя
    string six = first.substr(pos3+separate.length());//после разделителя
    cout <<six<<endl;
    cout<<pos3<<" pos3";
    
    string separat(":"); //разделитель
    string::size_type pos2 = second.find(":");//ищем положение разделителя
    string third = second.substr(0, pos2);//до разделителя
    string fourth = second.substr(pos2+separat.length());//после разделителя
 
    int n=0;
    while (n<=2) { //ставим счетчик на 3 попытки
    n++;
    cout<<endl <<"Пароль: ";
    cin.getline(password, 25); //вводим пароль
    if (fourth==password) { //сравниваем пароль
    cout<<"Вход выполнен!";
    exit(0);
    }
}
goto start;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_stanislav
26 / 26 / 8
Регистрация: 16.08.2014
Сообщений: 246
Завершенные тесты: 2
03.10.2016, 13:07     Насколько плохо написан код? #21
Цитата Сообщение от gru74ik Посмотреть сообщение
А возвращаясь к вопросу ТС? Насколько плохо написан его код? На что бы стоило обратить внимание чисто стилистически и концептуально?
Я думаю что нужно выработать свой стиль приближенный к стилю большинства программистов. Без заскоков в ту или иную сторону.

Добавлено через 7 минут
Вот мой стиль. Стандарт, читается легко (я так думаю)
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// *.h
 
#include "IState.h"
 
#ifndef DEFINE_STATE_MACHINE
#define DEFINE_STATE_MACHINE
 
namespace lexer
{
    class StateMachine
    {
    public:
        StateMachine();
        ~StateMachine();
 
        void Set(char);
        void Reset();
 
        StateId GetState() { return stateId; }
 
    private:
        static const int size = 4;
        IState* states[size];
 
        StateId stateId;
 
        static StateId Skip(char);
        StateId CheckState();
    };
}
 
#endif
 
// *.cpp
 
#include "StateMachine.h"
 
#include "StateFunction.h"
#include "StateName.h"
#include "StateNumber.h"
#include "StateOperation.h"
 
#include <cctype>
 
lexer::StateMachine::StateMachine()
{
    states[0] = new StateFunction();
    states[1] = new StateName();
    states[2] = new StateNumber();
    states[3] = new StateOperation();
 
    stateId = StateId::NON;
}
lexer::StateMachine::~StateMachine()
{
    for (int i = 0; i < size; i++)
        delete states[i];
}
 
void lexer::StateMachine::Set(char ch)
{
    for (int i = 0; i < size; i++)
        states[i]->Set(ch);
 
    stateId = CheckState();
 
    if (stateId == StateId::BAD)
        stateId = Skip(ch);
}
void lexer::StateMachine::Reset()
{
    for (int i = 0; i < size; i++)
        states[i]->Reset();
 
    stateId = StateId::NON;
}
 
lexer::StateId lexer::StateMachine::Skip(char ch)
{
    switch (ch)
    {
    case '^':
    case '*':
    case '/':
    case '+':
    case '-':
    case ';':
    case '(':
    case ')':
        return StateId::BAD;
 
    default:
        if (isspace(ch) )
            return StateId::BAD;
    }
 
    return StateId::NON;
}
 
lexer::StateId lexer::StateMachine::CheckState()
{
    for (int i = 0; i < size; i++)
        if (!states[i]->Good() && !states[i]->Bad() )
            return StateId::NON;
 
    for (int i = 0; i < size; i++)
        if (states[i]->Good() )
            return states[i]->GetId();
 
    return StateId::BAD;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
03.10.2016, 13:08     Насколько плохо написан код? #22
_stanislav, всем не угодишь, лучше зарекомендовать себя как знатока, чтоб никто не смел делать замечания, и составлять для остальных требования к формированию и оформлению кода.
_stanislav
26 / 26 / 8
Регистрация: 16.08.2014
Сообщений: 246
Завершенные тесты: 2
03.10.2016, 13:11     Насколько плохо написан код? #23
без стандартов далеко не уедешь. (хаос)
gru74ik
03.10.2016, 23:43
  #24

Не по теме:


Цитата Сообщение от Убежденный Посмотреть сообщение
используется "умный" diff
Честно, я про такой даже и не знал. Я руководствовался мнением DrOffset, которое я приводил выше и вот этой темой коллеги 0x10.
Отчего же таким diff'ом не пользуются все тогда? Или это какое-то ноу-хау?

DrOffset
04.10.2016, 00:04
  #25

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
Отчего же таким diff'ом не пользуются все тогда?
Этот вопрос из той же серии, что священная война "табы против пробелов", где апологеты табов тоже приводят аргументом использование инструментов, которые их (табы) "правильно" интерпретируют. Тем не менее, война не утихает.

Добавлено через 1 минуту
PS. Не встречал ни одного автоформаттера, который бы не "косячил" на исходном сложном форматировании. Особенно в коде на С++.

Добавлено через 15 минут
Впрочем, мое мнение уж чересчур демонизировали здесь. Никакого Diff-Driven-Development я ввиду не имел и не предлагал; конечно же инструменты для дела, а не дело для инструментов (всех вопросов жизни касается). Но везде должна быть мера.

obivan
Падаван С++
 Аватар для obivan
172 / 158 / 41
Регистрация: 11.11.2014
Сообщений: 590
Завершенные тесты: 1
04.10.2016, 00:27     Насколько плохо написан код? #26
Хочу сказать свое мнение ТС`у, многие начинающие программисты любят интересоватся у других, насколько хорошо написан код и тд. , я лично считаю так, во первых к коду нужно относится как к творчеству, и всю "красоту" которую вы там делаете сравнивать с мазками кисти

как по мне:
C++
1
2
3
4
for(int i(0); i < 10; ++i) {
    cosf(a);
    sinf(b);
}
выглядит явно лучше чем:

C++
1
for(int i(0); i<10;++i) {cosf(a);sinf(b);}
старайтесь наводить порядок в своем коде, НО не стоит забывать такую вещь как удобность для самого себя, если вам самому удобнее второй вариант, то пишите так, при условии если вы не показываете код другим, а если вы хотите вылаживать его на дискус, то стоит придерживатся общих "рекомендаций" по форматированию кода, чтобы другим было легче его разбирать, но это не значит, что эти рекомендации есть правила, вообщем я хотел донести такую мысль, каждого художника учат рисовать и двигать рукой одинаково, но потом каждый рисует по своему и с кодом так же как по мне
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2016, 03:17     Насколько плохо написан код?
Еще ссылки по теме:

Неправильно написан код C++
Правильно ли написан код C++
Этот код написан на С++ или Delphi? C++

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

Или воспользуйтесь поиском по форуму:
_stanislav
04.10.2016, 03:17     Насколько плохо написан код?
  #27

Не по теме:

я вам скажу просто а вы сами думайте , я люблю когда в корень смотрят, мозг не понимает, он приспосабливается.

Yandex
Объявления
04.10.2016, 03:17     Насколько плохо написан код?
Ответ Создать тему
Опции темы

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