Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37

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

28.06.2017, 10:39. Показов 3300. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2017, 10:39
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

Метки вообще не используются в программировании (Ну может если очень редко).
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 11:16  [ТС]
Вы бы смогли изменить текст моей программы, чтобы вместо меток были функции/процедуры? Мне гораздо проще анализировать код.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.06.2017, 12:20
Цитата Сообщение от alexey15 Посмотреть сообщение
GOSUB-RETURN.
это аналог "функций" на с++
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 13:04  [ТС]
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
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
28.06.2017, 13:47
Цитата Сообщение от Sergey_Davydovs Посмотреть сообщение
Метки вообще не используются в программировании (Ну может если очень редко).
Вы, видимо, не знакомы с ассемблерами.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
28.06.2017, 14:10
Цитата Сообщение от alexey15 Посмотреть сообщение
Но можно ли из самой процедуры/функции выпрыгнуть в другое место программы?
внутри одной функции можно прыгать только внутри этой самой функции.
прыгать в произвольное место программы стандартным способом нельзя.
но если очень сильно хочется - то можно,
однако вам такими хаками заниматься не нужно.

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

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

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

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

Функция принимает четкие аргументы, обрабатывает и возвращает конкретный результат. А не скачет как ей вздумается. Поэтому это не одно и то же. >_<
0
0 / 0 / 0
Регистрация: 27.06.2017
Сообщений: 37
28.06.2017, 15:09  [ТС]
Но я это и пытаюсь сделать, я слышал что basic менее функционален, чем си++. Поэтому я переучиваюсь. Но в начале своего обучения раньше я понимал зачем нужен каждый оператор и какого его применение. Для меня плохой стиль программирования ограничивался понятием плохо читаемого текста программы, а не применением каких-то запрещенных операторов.
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
28.06.2017, 15:15
Стивен Прата, "Язык программирования С++. Лекции и упражнения" в шестом издании 283 страница, прочитай и прекрати юзать этот рудимент.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.06.2017, 15:15
Помогаю со студенческими работами здесь

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

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

В заштрихованную фигуру бросают точки с координатами 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; setw(5) &lt;&lt; ptr; // вывод элементов...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru