0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
1

Не выполняется логический оператор &&

28.06.2017, 10:39. Показов 2017. Ответов 33
Метки нет (Все метки)

Добрый день. В данном коде
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
#include <iostream>
#include <string>
#include <cstdlib>
 
 
using namespace std;
int main(){
    setlocale (LC_ALL, "");
    system ("color 0a");
 
    // ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ;
    string approve;
    char log;
    char pass;
    int count = 0; //счетчик кол-ва попыток входа;
 
Begin1:
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << "|    ПРОГРАММА ВВОДА ДАННЫХ ОБ КОМПЬЮТЕРАХ    |" << endl;
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << endl;
    std::cout << ">> LARSSON Ltd.," << endl;
    std::cout << "Пожалуйста авторизуйтесь в системе!";
    std::cout << endl;
    log = '1';
    std::cout << "Вы согласны? (yes/no): ";
    std::cin >> approve;
    if (approve == "yes" || approve=="y") {goto yes;}
    if (approve == "no" || approve=="n")  {goto no;}
    if (!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) {goto eRo1;}
    if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
eRo1:
        cout << endl;
        system ("cls");
        cout << "******************************************" << endl;
        cout << "**** СООБЩЕНИЕ ОБ ОШИБКЕ ВВОДА ДАННЫХ ****" << endl;
        cout << "******************************************" << endl;
        cout << endl;
        cout << "ВЫБРАН НЕСУЩЕСТВУЮЩИЙ ВАРИАНТ ОТВЕТА" << endl;
        cout << endl << endl;
        count ++;
        cout << "Количество попыток ввода данных: " << count << endl;
        goto Begin1;
eRo2:
        system ("cls");
        cout << ">>>>>>> Сообщене о превышении числа счетчика";
        cout << endl;
        cout << "Вы превысили допустимое количество попыток ввода данных" << endl;
        system ("echo Нажмите любую клавишу");
        system ("pause");
        count = 0;
        goto Begin1;
 
yes: {
        cout <<" Вы выбрали " << approve << endl << log << endl;
        return 0;
        }
no: {
        cout << "Вы отказались " << approve << endl;
        return 0;}
}
не выполняется строка
C++
1
if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
По идее, если вводить неправильное значение, а так же при достижении числа попыток 4 (count =4) программа должна передавать управление на eRo2, а count должен быть снова равен 0. Но управление переходит на eRo1, а count постоянно увеличивается.

Добавлено через 7 минут
Нашел в чем причина. Я поменял местами
C++
1
2
 if (!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) {goto eRo1;}
 if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2017, 10:39
Ответы с готовыми решениями:

Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;)
Хочу специализировать swap для своего класса. Получаю ошибку. Вот код:#ifndef A_H #define A_H ...

Чем оператор || отличается от оператора && ?
Приведите простые примеры, никак до мозгов не доходит)

Оператор if и логическая операция И (AND) &&
Вод подскажите что будет быстрей обрабатываться процессором: if(!a&amp;&amp;!b) { a+b; } или

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const...

33
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 10:41 2
Зачем вы используете метки? Без них код и лучше смотрится и легче читается.

И он у вас явно не дойдет до этого условие, т.к изначально проверяется предыдущее - и оно изначально будет True -> выполнение eRo1.

Поменяйте местами условия
0
Вездепух
Эксперт CЭксперт С++
10315 / 5605 / 1530
Регистрация: 18.10.2014
Сообщений: 13,694
28.06.2017, 10:42 3
Цитата Сообщение от alexey15 Посмотреть сообщение
не выполняется строка
А как она вообще может выполняться, если предыдущая строка "перехватывает" все возможные варианты?
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 10:50  [ТС] 4
Если честно, то СИ++ я начал изучать 2 недели назад. А до этого активно пользовался BASIC. Причем даже не Visual Basic, а Qbasic. Там метки для профессионального программирования желательны к использованию.
Без них мне очень сложно пока что читать код. Они для меня являются точкой опоры при просмотре кода. Для меня морально очень важно иметь возможность передать управление на любую строку, т.к. я люблю писать большие объемы программ. Понимаю, что и без меток это возможно, но от Бэйсика просто так не отлипнешь.

Добавлено через 2 минуты
Еще я очень люблю метод GOSUB-RETURN. Но здесь я подобного еще не проходил, не знаю. Но мне без него очень сложно пока что
0
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 11:01 5
Вам знакомы "Процедуры", "Функции"?
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 11:03  [ТС] 6
Я слышал о них, но еще не изучал. Как я понял, это своеобразная имитация подпрограмм. Как их использовать, еще пока не знаю, но если бы вы объяснили мне на пальцах, как их использоваться, было бы здорово.
0
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 11:07 7
alexey15, Обязательно изучите их, на ютубе куча-куча материала по этому. Это основа-основ, без этого - очень тяжело будет в будущем, тем более при изучении ООП.

Если очень коротко. Вы можете eRo1, eRo2 и т.д разбить на подпрограммы, которую будете вызывать с помощью имени этой процедуры/функции. Почти тоже самое, что и метка, но не со всем...

Не умею я объяснять, к сожалению) Посмотрите ролик в ютубе - можно самый короткий (минут 10) - там все расскажут и покажут.

Метки вообще не используются в программировании (Ну может если очень редко).
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 11:16  [ТС] 8
Вы бы смогли изменить текст моей программы, чтобы вместо меток были функции/процедуры? Мне гораздо проще анализировать код.
0
Эксперт С++
8712 / 4294 / 956
Регистрация: 15.11.2014
Сообщений: 9,737
28.06.2017, 12:20 9
Цитата Сообщение от alexey15 Посмотреть сообщение
GOSUB-RETURN.
это аналог "функций" на с++
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 13:04  [ТС] 10
Goto позволяет прыгать по программе, не возвращаясь обратно. Я так понял, что процедура и функция в СИ++ сами по себе подразумевают возврат в исходную точку. Но можно ли из самой процедуры/функции выпрыгнуть в другое место программы? И как это сделать?
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
#include <iostream>
#include <string>
#include <cstdlib>
 
void message ();
using namespace std;
int main(){
    setlocale (LC_ALL, "");
    system ("color 0a");
 
    // ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ;
    string approve;
    char log;
    char pass;
    int count = 0; //счетчик кол-ва попыток входа;
 
Begin1:
    message ();
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << "|    ПРОГРАММА ВВОДА ДАННЫХ ОБ КОМПЬЮТЕРАХ    |" << endl;
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << endl;
    std::cout << ">> LARSSON Ltd.," << endl;
    std::cout << "Пожалуйста авторизуйтесь в системе!";
    std::cout << endl;
    log = '1';
    std::cout << "Вы согласны? (yes/no): ";
    std::cin >> approve;
    if (approve == "yes" || approve=="y") {goto sProg;}
    if (approve == "no" || approve=="n")  {goto nProg;}
    if ((!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) && (count > 4)) {goto eRo2;}
    if (!(approve == "yes" || approve == "y" || approve == "no" || approve == "n")) {goto eRo1;}
eRo1:
        cout << endl;
        system ("cls");
        cout << "******************************************" << endl;
        cout << "**** СООБЩЕНИЕ ОБ ОШИБКЕ ВВОДА ДАННЫХ ****" << endl;
        cout << "******************************************" << endl;
        cout << endl;
        cout << "ВЫБРАН НЕСУЩЕСТВУЮЩИЙ ВАРИАНТ ОТВЕТА" << endl;
        cout << endl << endl;
        count ++;
        cout << "Количество попыток ввода данных: " << count << endl;
        goto Begin1;
eRo2:
        system ("cls");
        cout << ">>>>>>> Сообщене о превышении числа счетчика";
        cout << endl;
        cout << "Вы превысили допустимое количество попыток ввода данных" << endl;
        system ("echo Нажмите любую клавишу");
        system ("pause");
        count = 0;
        goto Begin1;
 
sProg: {
        cout <<" Вы выбрали " << approve << endl << log << endl;
        return 0;
        }
nProg: {
        cout << "Вы отказались " << approve << endl;
        return 0;}
}
void message ()
{
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << "|    РАБОТАЕТ ПОДПРОГРАММА                    |" << endl;
    std::cout << "+---------------------------------------------+" << endl;
    std::cout << endl;
    std::cout << endl;
    goto eRo1;
}
Компилятору не нравится предпоследняя строчка goto eRo1;
0
Велосипедист...
352 / 219 / 73
Регистрация: 15.12.2015
Сообщений: 785
28.06.2017, 13:47 11
Цитата Сообщение от Sergey_Davydovs Посмотреть сообщение
Метки вообще не используются в программировании (Ну может если очень редко).
Вы, видимо, не знакомы с ассемблерами.
0
Эксперт С++
8712 / 4294 / 956
Регистрация: 15.11.2014
Сообщений: 9,737
28.06.2017, 14:10 12
Цитата Сообщение от alexey15 Посмотреть сообщение
Но можно ли из самой процедуры/функции выпрыгнуть в другое место программы?
внутри одной функции можно прыгать только внутри этой самой функции.
прыгать в произвольное место программы стандартным способом нельзя.
но если очень сильно хочется - то можно,
однако вам такими хаками заниматься не нужно.

вам нужно переписать программу без использования goto.
и приучать себя к хорошей культуре программирования.
1
13 / 14 / 4
Регистрация: 10.10.2014
Сообщений: 109
28.06.2017, 14:12 13
В лс напишите, вечером попробую объяснить и перепишем код вместе.
0
4814 / 2275 / 287
Регистрация: 01.03.2013
Сообщений: 5,933
Записей в блоге: 26
28.06.2017, 14:14 14
Эх, а че там, процедуры/функции... Даешь лонгджамп, подмену адреса возврата и вообще колл-сс
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 14:40  [ТС] 15
вам нужно переписать программу без использования goto.
и приучать себя к хорошей культуре программирования
А чем моя культура программирования плохая?...
Единственные доводы против, которые я нашел в интернете указывают только на тяжелочитаемый код. Но тут уж как программист сам захочет, так и напишет. Можно и с ипользованием goto написать очень приятный глазу текст, а можно и с использованием процедур\функций наворотить так, что разбираться нужно будет целой командой.
В конце концов Вы же быстро разобрались в тексте моей программы.

Добавлено через 13 минут
Если честно, то для меня даже такие метки, как в этой программе немного не привычны. Я всегда нумеровал каждую строку программы. Таким образом у меня была возможность передать управление куда угодно. Раньше я фанател программированием очень сильно, я садился и писал программу, любую. Идея о том, что она будет делать рождалась по ходу пьесы. Поэтому я не всегда представлял себе ее структуру и где какие будут подпрограммы, поэтому метки были спасением, т.к. часто приходилось все допиливать.
0
Форумчанин
Эксперт CЭксперт С++
8191 / 5041 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
28.06.2017, 14:55 16
Как сказал Дейкстра,
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию
goto стоит использовать только в очень узком кругу задач, когда это действительно повысит читаемость. Например, выход из циклов множественной вложенности (хотя такой код и без goto отдаёт душком). Глядя на ваш код становится понятно, почему большинство предпочитает новичкам вообще запретить его использование. В вашем случае goto явно не повысил читаемость.

Добавлено через 1 минуту
Цитата Сообщение от alexey15 Посмотреть сообщение
Но тут уж как программист сам захочет, так и напишет
А потом другим программистам этот код читать/править. Прилагая ненужные усилия к пониманию сути написанной вермишели.
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 15:04  [ТС] 17
Я посмотрел как использовать процедуры и функции. Получается, что вместо goto я могу поставить имя_процедуры\функции. Тогда вместо метки будет стоить void имя_метки (аргументы (при наличии)) {}. Это имитации работы подпрограммы в BASIC.
Но ведь получается, что программисту, который будет читать текст программы будет все равно, будет там стоять goto или имя_процедуры/функции (кстати, как правильно это называется?). Он же все равно не поймет в чем ее суть, пока не спуститься на эту метку и не посмотрит суть этого участка программы. Или я все неправильно понял?
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
28.06.2017, 15:05 18
Цитата Сообщение от alexey15 Посмотреть сообщение
Если честно, то для меня даже такие метки, как в этой программе немного не привычны. Я всегда нумеровал каждую строку программы. Таким образом у меня была возможность передать управление куда угодно. Раньше я фанател программированием очень сильно, я садился и писал программу, любую. Идея о том, что она будет делать рождалась по ходу пьесы. Поэтому я не всегда представлял себе ее структуру и где какие будут подпрограммы, поэтому метки были спасением, т.к. часто приходилось все допиливать.

Вам нужно либо срочно переучиваться, либо сменить сферу интересов на ту, где проектирование не так важно.

Функция принимает четкие аргументы, обрабатывает и возвращает конкретный результат. А не скачет как ей вздумается. Поэтому это не одно и то же. >_<
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 15:09  [ТС] 19
Но я это и пытаюсь сделать, я слышал что basic менее функционален, чем си++. Поэтому я переучиваюсь. Но в начале своего обучения раньше я понимал зачем нужен каждый оператор и какого его применение. Для меня плохой стиль программирования ограничивался понятием плохо читаемого текста программы, а не применением каких-то запрещенных операторов.
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
28.06.2017, 15:15 20
Стивен Прата, "Язык программирования С++. Лекции и упражнения" в шестом издании 283 страница, прочитай и прекрати юзать этот рудимент.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2017, 15:15
Помогаю со студенческими работами здесь

Почему условие "a && b == 0" не выполняется?
решил вспомнить c++, начал что то писать и непонятка void __fastcall TForm1::Button1Click(TObject...

В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9&
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt;...

Оператор &&
В C# при использовании оператор &amp;&amp;, если первая операция будет false, то проверка второй операции...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru