Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
pavlenko2k16
1 / 1 / 1
Регистрация: 24.09.2016
Сообщений: 135
Завершенные тесты: 1
#1

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

02.10.2016, 18:41. Просмотров 695. Ответов 26
Метки нет (Все метки)

написал программу с горем да пополам, но появился вопрос о ее качестве. насколько плохо она написана? стояла такая задача:
программа содержит массив строк, каждый из которых представляет собой запись про учетную запись пользователя, а каждое поле отделяется от другого двоеточием. известно, что первое поле сохраняет логин, пятое - имя и фамилию через запятую, а шестое - пароль
запросить логин пользователя. если логин неизвестный, то запросить логин заново. предусмотреть выход из программы если будет введено слово "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;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2016, 18:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Насколько плохо написан код? (C++):

Код написан в Dev C. Не работает в Visual. Как нужно переделать код? - C++
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт ошибку. ...

Неправильно написан код - C++
Функция должна находить простые числа в заданном массиве. Выходит что-то вроде 003С100 .. void f1 (int*mas) { int size =...

Правильно ли написан код - C++
Извините, подправьте плиз, всем заранее огромное спасибо #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;string.h&gt; ...

правильно ли написан код в с++? - C++
#include &lt;iostream&gt; #include &lt;map&gt; #include &lt;fstream&gt; using namespace std; int main() { map &lt;char,int&gt; chars; ...

Правильно ли написан код .cpp? - C++
Вот сам код #define _CRT_SECURE_NO_WARNINGS #include &lt;Windows.h&gt; #include &lt;HCNetSDK.h&gt; #include &lt;memory&gt; #include &lt;cstdio&gt; ...

Этот код написан на С++ или Delphi? - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include...

26
ture
442 / 335 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
03.10.2016, 10:30 #16
pavlenko2k16, я не буду показывать как надо, потому что это дело личное. Чтение любого код предполагает какие-то усилия, а понедельник бывает тяжелый. Иногда человеку проще вызвериться по поводу того, что с кодом что-то не то, чем вникать в него (авось повезет и в код не придется дальше вникать). Словно для таких случаев и придуманы всякие правила и требования к коду и его оформлению (как будто одного понедельника для этого мало!) В некоторых языках программирования нет шаблонных конструкций вроде условного оператора или цикла и нет ничего кроме goto в разных формах. Но встречается goto и в СИ, когда память берегут и не спешат забивать её переменными счетчиков циклов. Иногда goto не просто бросает нить программы в очередную пропасть, но еще и контекст восстанавливает (каким он был до какого-то момента). Goto не только любимый повод начать понедельник с хорошего скандала, но и способ реализации базы данных mail.ru - Tarantool (смотрите и дивитесь goto)
1
Убежденный
Ушел с форума
Эксперт С++
15708 / 7218 / 1139
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
03.10.2016, 10:41 #17
Цитата Сообщение от gru74ik Посмотреть сообщение
Убежденный, а к чему тогда все эти ломания копий на тему оформления кода, если умный автоформаттер всё сам умеет сделать красиво?
Ну вообще, посыл заключался в том, что читаемость кода - главное, а угождать
особенностям поведения diff tools, IDE и т.п. - это второстепенное. IMHO.
0
gru74ik
Эксперт CЭксперт С++
4207 / 1853 / 198
Регистрация: 20.02.2013
Сообщений: 4,992
Записей в блоге: 22
03.10.2016, 10:41 #18
Убежденный, Mr.X, ture, ок, я понял. А возвращаясь к вопросу ТС? Насколько плохо написан его код? На что бы стоило обратить внимание чисто стилистически и концептуально?
0
Selot
172 / 108 / 28
Регистрация: 19.01.2010
Сообщений: 442
Завершенные тесты: 2
03.10.2016, 10:45 #19
goto не так и плох сам по себе, тот же ассемблер без него ни куда. разница только в том, что в высокоуровневых языках гоуту можно(крайне желательно) заменять более понятными человеку конструкциями. тут вопрос только читабельности и сопровождаемости кода. имхо
0
Croessmah
Ушел
Эксперт CЭксперт С++
13557 / 7707 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.10.2016, 10:55 #20
Цитата Сообщение от pavlenko2k16 Посмотреть сообщение
C++
1
privetstvie:
Ну, если это приветствие, то здесь
Цитата Сообщение от pavlenko2k16 Посмотреть сообщение
C++
1
2
string second = str.substr(pos+separ.length());//должны быть секунды
string separate("::::"); //и сепаратисты


Добавлено через 1 минуту
Цитата Сообщение от pavlenko2k16 Посмотреть сообщение
C++
1
goto privetstvie;
готы приветствуют?
0
_stanislav
Рука
39 / 91 / 29
Регистрация: 16.08.2014
Сообщений: 554
Завершенные тесты: 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;
}
0
ture
442 / 335 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
03.10.2016, 13:08 #22
_stanislav, всем не угодишь, лучше зарекомендовать себя как знатока, чтоб никто не смел делать замечания, и составлять для остальных требования к формированию и оформлению кода.
0
_stanislav
Рука
39 / 91 / 29
Регистрация: 16.08.2014
Сообщений: 554
Завершенные тесты: 2
03.10.2016, 13:11 #23
без стандартов далеко не уедешь. (хаос)
0
gru74ik
03.10.2016, 23:43
  #24

Не по теме:


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

0
DrOffset
04.10.2016, 00:04
  #25

Не по теме:

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

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

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

0
obivan
Падаван С++
415 / 235 / 60
Регистрация: 11.11.2014
Сообщений: 834
Завершенные тесты: 2
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);}
старайтесь наводить порядок в своем коде, НО не стоит забывать такую вещь как удобность для самого себя, если вам самому удобнее второй вариант, то пишите так, при условии если вы не показываете код другим, а если вы хотите вылаживать его на дискус, то стоит придерживатся общих "рекомендаций" по форматированию кода, чтобы другим было легче его разбирать, но это не значит, что эти рекомендации есть правила, вообщем я хотел донести такую мысль, каждого художника учат рисовать и двигать рукой одинаково, но потом каждый рисует по своему и с кодом так же как по мне
0
_stanislav
04.10.2016, 03:17     Насколько плохо написан код?
  #27

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2016, 03:17
Привет! Вот еще темы с ответами:

Код написан,нужна небольшая корректировка.Массивы - C++
Здравствуйте,задание:: Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 0, если сумма элементов k-го...

Найти сумму ряда (правильно ли написан код?) - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { int i,s,res=(i)*(i); for (int i=1; i&lt;=39; i+=2) { ...

Код написан,нужна небольшая корректировка.Массивы - C++
Задана матрица размером N×M, N,M&lt;50. Получить массив B, присвоив его k-му элементу значение 1, если элементы k–й строки матрицы ...

Программный код написан без ошибок но программу брикает - C++
вот сам код #include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;string&gt; #include&lt;iomanip&gt; using namespace std; struct film ...


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

Или воспользуйтесь поиском по форуму:
27
04.10.2016, 03:17
Ответ Создать тему
Опции темы

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